Mi sono imbattuto in questa domanda quando stavo progettando un videogioco in C #.
Se consideriamo giochi come Battlefield o Call of Duty , centinaia o addirittura migliaia di proiettili volano contemporaneamente. Gli eventi vengono costantemente attivati e, per quanto ne so, ciò risucchia molta potenza di elaborazione ... o lo fa? Voglio sapere come i vari sviluppatori di giochi gestiscono i proiettili (2D e 3D) e qual è il metodo più efficiente per ognuno.
Ho letto la domanda Come vengono simulati i proiettili nei videogiochi? ma non tocca come funzionano i proiettili dal punto di vista della progettazione del programma.
Ho avuto un paio di idee, ma ognuna ha i suoi svantaggi:
Metodo più efficiente che mi viene in mente (per i giochi 2D):
Supponiamo che dovessi creare una classe chiamata Bullet e per quanto tempo l'utente tiene premuto un pulsante, ogni 0,01 secondi verrebbe creato un oggetto Bullet. Questo proiettile ha:
1 velocità
2 Posizione iniziale della posizione da cui viene sparato
3 trama Sprite
4 Un effetto al colpo
Dal momento che il proiettile sarebbe la sua classe, poteva gestire da solo gli ascoltatori di disegno, movimento e azione.
Non sarebbe difficile per il processore elaborare migliaia di questi oggetti che vengono istanziati, quindi distrutti (quando viene attivato l'effetto al colpo)? Spazio RAM?
Metodo efficiente per i giochi 3D - Un altro pensiero che avevo era:
Diciamo che creo una classe di armi. Questa arma ha varie caratteristiche, alcune delle quali:
1 Rileva dove sta puntando l'arma e determina se sta guardando un bersaglio
2 Attiva un'animazione della sparatoria
3 Ha un metodo doDamage () che indica qualcosa per sottrarre la salute da qualunque cosa sia puntata la pistola
4 Notifica una classe di animazione proiettile quando viene premuto il pulsante
Potrei quindi creare una classe statica, ad esempio BulletAnimation, che potrebbe ottenere una notifica da dove si trova la pistola che l'ha attivata, dove è puntata quella pistola (per la destinazione del proiettile) e informazioni su uno sprite e velocità appropriati da usare per il proiettile . Questa classe quindi disegna sprite (su un nuovo thread forse, idk) basato su entrambe le posizioni e lo sprite desiderato, per simulare un proiettile sparato da una pistola.
Quest'ultimo sembra molto più difficile da codificare e non ci vorrebbe molta potenza di elaborazione per chiamare costantemente l'elettricità statica per farlo per migliaia di proiettili alla volta? Anche ottenere aggiornamenti costanti su entrambe le posizioni iniziale e finale sarebbe difficile.
La mia domanda è: qual è il modo più efficiente in cui i creatori di giochi lo fanno? Questo metodo cambia da giochi 2D a giochi 3D?
pew-pew-pew
tecnologia :)