Je suis tombé sur cette question lorsque je concevais un jeu vidéo en C #.
Si nous considérons des jeux tels que Battlefield ou Call of Duty , des centaines voire des milliers de balles volent en même temps. Les événements sont déclenchés constamment, et d'après ce que je sais, cela consomme beaucoup de puissance de traitement… ou le fait-il? Je souhaite savoir comment divers développeurs de jeux gèrent les puces (2D et 3D) et quelle est la méthode la plus efficace pour chacune d’elles.
J'ai lu la question Comment les balles sont-elles simulées dans les jeux vidéo? mais cela ne concerne pas le fonctionnement des puces du point de vue de la conception du programme.
J'ai eu quelques idées, mais chacune a ses inconvénients:
Méthode la plus efficace à laquelle je pouvais penser (pour les jeux 2D):
Supposons que je crée une classe appelée Bullet et que, aussi longtemps que l'utilisateur maintienne un bouton enfoncé, un objet Bullet sera créé toutes les 0,01 seconde. Cette balle a:
1 vélocité
2 Position de départ d'où il est tiré
3 texture Sprite
4 Un effet de frappe
Puisque la balle serait sa propre classe, elle pourrait gérer elle-même les écouteurs dessinant, bougeant et agissant.
Ne serait-il pas difficile pour le processeur de traiter des milliers de ces objets en cours d'instanciation, puis de destruction (lorsqu'un effet de frappe est déclenché)? Espace RAM?
Méthode efficace pour les jeux 3D - Une autre pensée que j'avais était la suivante:
Disons que je crée une classe d'arme. Cette arme a diverses caractéristiques, dont certaines:
1 Détecter le point de visée de l'arme et déterminer si elle vise une cible
2 Déclenchez une animation du tir au fusil
3 Possède une méthode doDamage () qui indique quelque chose à soustraire la santé quel que soit le type de pistolet visé
4 Notifie une classe d'animation de balle lorsque le bouton est enfoncé
Je pourrais ensuite créer une classe statique, disons BulletAnimation, qui pourrait recevoir une notification indiquant l'origine du pistolet, l'emplacement de ce pistolet (pour la destination de la balle) et des informations sur un sprite et une vitesse appropriés à utiliser pour la balle. . Cette classe dessine ensuite les images-objets (sur un nouveau fil, idk) en fonction des deux positions et de l'image-objet souhaitée, afin de simuler le tir d'une balle.
Ce dernier semble beaucoup plus difficile à coder, et ne faudrait-il pas beaucoup de puissance de traitement pour appeler constamment le statique afin de le faire pour des milliers de balles à la fois? Obtenir des mises à jour constantes sur les positions de départ et d'arrivée serait également difficile.
Ma question est la suivante: quelle est la méthode la plus efficace pour les créateurs de jeux? Cette méthode change-t-elle des jeux 2D aux jeux 3D?
pew-pew-pew
technologie :)