Mon jeu a différents types de bons et différents types de méchants. Ils tireront tous des projectiles l'un sur l'autre, mais je ne veux pas que des dommages collatéraux accidentels se produisent pour l'un ou l'autre alignement. Donc, les méchants ne devraient pas pouvoir frapper / endommager d'autres méchants et les bons ne devraient pas pouvoir frapper / endommager d'autres bons.
La façon dont je pense à résoudre ce problème est de faire en sorte que l' Unit
instance (c'est javascript, btw), ait une alignment
propriété qui peut être soit good
ou bad
. Et je ne laisserai la collision se produire que si le
class Attack
boolean didAttackCollideWithTarget(target)
return attack.source.alignment != target.alignment and collisionDetected(attack.source, target)
C'est du pseudo-code, bien sûr.
Mais je pose cette question parce que j'ai l'impression qu'il pourrait y avoir une façon beaucoup plus élégante de concevoir cela en plus d'ajouter encore une autre propriété à ma Unit
classe.
la source
Réponses:
Filtrage par collision
Une situation plus robuste qui évolue en plusieurs couches consiste à utiliser le filtrage, ce qui n'est pas la même chose que le regroupement.
Cela fonctionne mieux en donnant à chaque objet 2 masques de bit .
Et ne déclenchez une collision que si ce qui suit est vrai.
Il est plus facile de définir par défaut le masque sur 0xFFFF, ce qui entraîne sa collision avec tout. Et par défaut la catégorie à 0x0001. les objets entreront en collision avec les catégories du masque des autres s'il y aura une collision.
Une autre façon de penser est que chaque objet a un type et une liste de tous les types avec lesquels il peut entrer en collision. Il n'y a collision que lorsque deux objets entrent en collision les uns avec les autres. Vous pourriez avoir le même comportement en ayant une liste d'énumérations au lieu d'un masque mais un masque dans un ordre de grandeur plus rapide.
Scénario que vous décrivez
J'aime profiter des énumérations dans cette situation.
Alors disons que oui.
Balle tirée par un bon gars
Bons gars
Méchants
Ce qui se traduit ci-dessous quand une balle tirée par un bon gars frappe un autre bon gars.
Mais cela frappera les méchants.
la source
J'ai eu le même problème sur mon projet actuel (en Java). Après quelques essais, il est résolu en créant quatre listes. Cette solution est créée en Java et pour un jeu 2D mais devrait également fonctionner, de manière similaire, en JavaScript
pseudo-code
pseudo-code, idem pour la classe Bullets
Ce n'est peut-être pas la solution la meilleure ou la plus rapide, mais cela vous aidera pour le moment. Je suis désolé de ne pas pouvoir vous proposer de solution en JavaScript mais j'espère pouvoir vous aider
Au fait, mon anglais n'est pas le meilleur mais j'espère que vous pourrez suivre mon explication
la source