Come implementare un fucile da caccia in un gioco?


14

Le pistole e le mitragliatrici sono facili: puoi solo far sparare proiettili in una certa direzione, quindi l'ho già implementato. Un fucile, d'altra parte, danneggia qualcosa in una certa area che sembra un cono. Come dovrei implementarlo? Ho un paio di suggerimenti qui, ma potrei usare alcuni consigli:

  • Dividi un proiettile in più piccoli proiettili, che fanno meno danni da soli, ma volano in una direzione simile (è più probabile che un nemico più vicino venga colpito)
  • Non usare proiettili: basta avere un effetto particellare di un colpo di fucile e calcolare la quantità di danno che i nemici ottengono in base alla posizione / orientamento, ecc.
  • Avere un grosso proiettile invisibile (ad esempio un cubo) che danneggia le cose, così come un effetto particellare che lo farà sembrare come se fosse in realtà un colpo di fucile.

Grazie in anticipo!


Queste opzioni sono tutte valide (anche se la prima, perché non iniziare con i proiettili multipli?) E la decisione si basa sul design del tuo gioco.
congusbongus,

Correlati: la precisione rispetto alla formula della distanza e al "cono di fuoco" possono essere un buon termine di ricerca per questo.
MichaelHouse

Risposte:


21

La maggior parte dei giochi implementa i fucili da caccia come un'arma che spara più proiettili contemporaneamente, ma ognuno con una certa randomizzazione dell'angolazione lascia l'attore. Nella maggior parte dei moderni tiratori in prima persona quasi tutte le armi hanno almeno un po 'di diffusione per ogni colpo che sparano per renderle meno accurate a lungo raggio, quindi la stessa implementazione può essere usata per i fucili.

Implementazione semplice: quando si desidera uno spread di 10 ° e il giocatore guarda in direzione 0 ° in verticale e 50 ° in orizzontale, i proiettili li lascerebbero in un angolo tra -5 ° e + 5 ° in verticale e tra 45 ° e 55 ° in orizzontale.

Migliore implementazione: distribuisci i proiettili non in un riquadro rettangolare ma in un'area circolare attorno al mirino del giocatore.

La ridotta efficienza percepita a lungo raggio deriva dalla diffusione dei proiettili, il che significa che obiettivi lontani e piccoli non saranno colpiti da tutti. Quando vuoi enfatizzarlo ulteriormente per rendere il tuo fucile un'arma a corto raggio, puoi anche ridurre il danno di ogni proiettile per ogni frame di logica di gioco che percorre.

Nei tiratori dall'alto verso il basso o a scorrimento laterale è meno comune diffondersi su tutte le armi perché l'area di gioco è troppo piccola per avere un senso, ma quando vuoi un'arma come un fucile è una questione diversa e uguale la tecnica può essere utilizzata, solo che non è necessario preoccuparsi della terza dimensione. In alternativa puoi sparare i proiettili ad angoli fissi come -6 °, -4 °, -2 °, 0 °, 2 °, 4 °, 6 °. In un contesto 2d non sembrerà artificiale come in un contesto 3d e piacerà al giocatore di sfida, perché riduce le possibilità.


L'implementazione migliore è altrettanto semplice. Il primo approccio richiede due angoli casuali (orizzontale e verticale), così come il secondo (fuori asse [0, + 5 °] e rotazione lungo l'asse [0, 360 °])
MSalters

@MSalters Che non distribuisce uniformemente i proiettili nel cerchio. Invece, li concentra attorno all'asse. Questo può o meno essere l'effetto che uno sta cercando. Per ottenere una distribuzione casuale uniforme all'interno del cerchio, vedi questa risposta .
Daniel AA Pelsmaeker,

@Virtlink: giusto, anche se la densità di probabilità uniforme all'interno del cerchio non è quella che mi piacerebbe. Una distribuzione normale tende ad essere la migliore per cose di fisica come questa, ed è anche particolarmente semplice da fare: basta diffondere i valori ϑ con una distribuzione normale 1D e i valori φ con la stessa distribuzione normale ridimensionata di ϑ. Non c'è bisogno di andare a coordinate doppiamente polari.
leftaroundabout

Ecco una pagina che parla degli spread dei fucili da caccia , potresti dare un'occhiata e vedere cosa fanno.
AJMansfield,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.