Donc, ma question est simple, et je suppose que cela se résume à l'anal que vous voulez être sur la détection de collision. Pour garder les choses simples, supposons que nous parlons de sprites 2D définis par une boîte englobante. En outre, supposons que mon objet sprite a une fonction pour détecter les collisions comme ceci: S.collidesWith(other);
Enfin la scène bouge et les "murs" de la scène peuvent bouger, un objet ne peut pas toucher un mur.Opinions sur les objets de détection de collision avec une scène en mouvement
donc une implémentation simple pourrait ressembler à ceci (code psuedo):
moveWalls();
moveSprite();
foreach(wall as w) {
if(s.collidesWith(w)) {
gameover();
}
}
Le problème est que si le mouvement de l'image-objet et le mur vers l'autre, en fonction des circonstances (par exemple instant diagonale) . Ils peuvent passer l'un à travers l'autre (improbable mais pourrait arriver).
Donc, je peux le faire à la place. Cela prend soin de la traversée de l'un l'autre problème, mais un autre problème rare se présente. Si elles sont adjacentes (littéralement le pixel suivant) et que le mur et l'image-objet se déplacent à gauche, j'obtiendrai une collision invalide puisque le mur bouge, vérifie la collision (hit) puis l'image-objet est déplacée. Ce qui semble injuste. De plus, à cela, la détection de collision redondante est très inefficace. Je pourrais donner la priorité au mouvement du joueur en soulageant le premier problème mais il est encore en train de vérifier deux fois.
moveSprite();
foreach(wall as w) {
if(s.collidesWith(w)) {
gameover();
}
}
moveWalls();
foreach(wall as w) {
if(s.collidesWith(w)) {
gameover();
}
}
Suis-je simplement sur la pensée de cette question, si cela vient d'être écrit à la craie jusqu'à « ça arrivera assez rare que personne ne se souciera »? Certainement en regardant de vieux jeux basés sur des sprites, je trouve souvent des situations où la détection de collision a des défauts subtils, mais je pense que maintenant nous pouvons faire mieux: -P. Quelles sont les pensées des gens?