Collisions et tilemaps dans un jeu 2D

a marqué ce sujet comme résolu.

Bonjour/Bonsoir :)

Je développe actuellement un petit framework de jeux 2D (en javascript, avec l’API canvas).

Après avoir codé le système d’affichage des sprites et des tilemaps, je dois me confronter à un nouveau problème: les collisions entre les deux.

J’ai déjà codé un système de scrolling fonctionnel, je sais récupérer les tiles à tester autour de mon personnage, je sais faire une collision entre deux AABB.

Comment réagir aux collisions avec les tiles ? Il faut replacer le personnage en fonction de où il touche, éviter qu’il clignote quand il rentre dans un mur, etc..

En partant du code suivant, comment écrire le test de collision et la réaction ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
var sprite = {
    x: 100,
    y: 100,
    width: 50,
    height: 50,
    xvel: 2,
    yvel: 1
}

for (var i = 0; i < tilesATester.length; i++) {

// tester les collisions, replacer le personnage, l'empêcher de refoncer dans le mur


};

Comment opérer en cas de collision ? Merci d’avance :) , j’espère avoir été assez clair.

+0 -0

Si j’ai bien compris, tu déplace le personnage et après tu vérifie s’il n’a pas fait un déplacement « illégal » (j’entend par là une collision par exemple) ?

Si c’est ça, ce n’est pas une bonne solution (de mon point de vue). Tu devrais vérifier avant même de le déplacer si sont déplacement est légal. Si c’est le cas tu le déplace, sinon tu fait ce que tu veux (renvoie de force opposé, rien, etc.).

+0 -0

Nous possédons que très peu d’informations de ta part pour te répondre. S’agit-il de déplacement sur une grille (case) ou de déplacement libre (pixel) ?

De plus ton problème semble être principalement un problème de logique. As-tu pris le temps de réfléchir sur papier pour construire ton algorithme ?

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte