Donc, ma question ne porte pas sur la méthode de détection de collision, mais plutôt sur un large «quel code devrait posséder la détection de collision». J'ai écrit un jeu dans le passé (jeux Flash 2D relativement simples) et cela m'a fait penser à quel code devrait posséder la détection de collision? Permettez-moi de clarifier - dire dans un jeu que j'ai un groupe d'ennemis et un groupe de projectiles que le joueur a tiré. Donc, dans le passé, j'avais déjà dit une classe EnemyManager, que chaque image mettait à jour les positions des ennemis et de la même manière que les projectiles des joueurs avaient une classe PlayerProjectilesManager qui se déplaçait autour des puces. C'est cool - tout va bien et dandy. Mais alors, je décide que je veux que les balles à affectent les ennemis (fou je sais!). Cela signifie donc quelque part dans le code que je dois:Gestion de la détection des collisions dans les jeux
- Figure quels balles et les ennemis sont en collision (je me fiche de cette question)
- figure la réponse à chaque collision
Alors En fait, ce que j'ai fait dans le passé, c'est que la classe EnemyManager prenne en charge les collisions et pendant sa boucle de mise à jour, elle trouve les puces qui entrent en collision avec les puces ennemies (étape 1) et appelle le code pour gérer la collision (par exemple, l'ennemi perd la santé, la balle disparaît) (étape 2). J'ai donc donné le contrôle de la détection de collision et de la «réaction» de collision au EnemyManager.
A quelques commentaires à ce sujet:
- Il se sent varie arbitraire pour moi que le EnemyManager est « contrôle » au lieu du PlayerProjectilesManager
- la fois la détection de collision et « réaction » collision sont gérées par le même propriétaire , ce n'est pas une exigence de mon point de vue
À mon avis, une entité tierce gère la détection de collision. Par exemple, avoir un CollisionManager qui possède un code qui sait quels autres gestionnaires doivent avoir des collisions détectées. Cela conduit à d'autres questions comme les interfaces que les 'Managers' doivent exposer pour une détection efficace des collisions sans exposer trop d'entrailles à CollisionManager. Ensuite, je suppose que le CollisionManager a diffusé une sorte d'événement, contenant 2 objets qui se sont heurtés, etc ... et peut-être que le gestionnaire EnemyManager/PlayerProjectilesManager a pu écouter séparément ces événements et réagir en conséquence et séparément. Je commence à avoir du sens dans mon esprit. :)
Pensées? Presque chaque jeu a une détection de collision, donc je suis sûr que cela a déjà été discuté. :)