Come creare in modo efficace modelli di proiettile


8

Attualmente sto creando uno sparatutto top-down come Touhou. Il fattore più importante del gioco è che ci sono molti modelli e modi diversi in cui i proiettili vengono generati e sparati al giocatore, guarda questo video: http://www.youtube.com/watch?v=4Nb5Ohbt1Sg#start=0 : 60; fine = 9: 53 ;

Al momento, sto usando un "Pattern" di classe che prevede una serie di passaggi per muoversi e sparare. Tuttavia, ritengo che questo metodo sia piuttosto laborioso in quanto devo creare un nuovo Pattern per ogni attacco e forse nuove classi Bullet che implementeranno un determinato comportamento.

Questa domanda ha ricevuto un commento che suggerisce che dovrei esaminare BulletML per creare e archiviare facilmente i proiettili con uno schema specifico. Sembra decente, ma mi ha portato a chiedermi, quali altre soluzioni hai che dovrei prendere in considerazione?

Aggiornare

Il mio progetto attuale è il seguente:

Diagramma UML

Un esempio di un modello implementato:

Il mio GigasPattern esegue prima un teletrasporto che sposta Alice in un determinato punto (X, Y) sullo schermo. Al termine, il modello inizia a utilizzare il Mover per spostare lo sprite (mentre il teletrasporto ha effetti e animazioni separate). Questi non destano preoccupazione, in realtà, poiché sono abbastanza semplici.

Il tiratore crea anche vari attacchi, che sono di nuovo classi che il tiratore può usare per creare vari schemi di proiettili, proprio come quello nella domanda che ho pubblicato. Una volta che il Mover ha raggiunto la sua destinazione, sia lui che il tiratore si fermano e ritornano in uno stato inattivo. Lo schema viene completato, viene rimosso dall'IA e ne viene scelto uno nuovo.

Risposte:


4

Sarà laborioso in ogni caso, creare un livello del genere sembra un compito facile e potrebbe non essere così difficile, ma richiederà sempre molto tempo. (Una stima molto approssimativa: 1000 volte il tempo di riproduzione per qualcosa di bello come quel video.)

Se usi un linguaggio di scripting devi comunque scrivere esattamente lo stesso codice, solo in una lingua diversa, il vantaggio è che puoi creare livelli di script senza fare confusione con il codice compilato. Se lavori in una grande squadra, lo vorrai sicuramente, ma come unico sviluppatore di solito non fa una grande differenza.

BulletML non è una risposta in sé, è necessaria un'implementazione funzionante nella tua lingua, che deve interfacciarsi con il resto del gioco. E c'è ancora un enorme lavoro di scrittura di tutti quei file XML.

Sono propenso a dire che dovresti continuare a programmare gli schemi desiderati in classe come fai tu, ma forse potresti rivelare alcuni esempi della tua struttura attuale, potrebbero esserci dei miglioramenti da apportare.

Modifica:
potrebbe esserci una realizzazione che potrebbe semplificare un po 'le cose e darti una cassetta degli attrezzi leggermente migliore. Potresti descrivere un'intelligenza artificiale come un modello, idealmente dovrebbe esserci solo un tipo di entità, ma qualsiasi entità del genere può scegliere di invocare un'altra entità dello stesso tipo per fare il lavoro. Questo ti libererà da ogni limite alla profondità con cui puoi annidare la propagazione delle responsabilità e darti un tipo di classe in meno a cui pensare.

Almeno questo è ciò che raccolgo dal diagramma. Mentre giustamente dovresti limitare la quantità di codice che includi in una domanda, non c'è mai un sostituto completo per vedere del codice effettivo.


Certo, grazie per l'aiuto. Ho incluso un diagramma UML semplificato del mio progetto attuale e un'applicazione di esempio del progetto in azione. Spero possa essere d'aiuto!
IAE,

2

Forse potresti implementare un tuo piccolo linguaggio di script per il tuo gioco. Quindi sarai in grado di scriptare i comportamenti dei proiettili semplicemente aggiungendo nuovi script. Il vantaggio di un proprio linguaggio di script è che potresti usarlo in altre parti del tuo gioco. Oppure potresti provare a usare Lua (non so quale lingua / framework stai usando). Ma secondo me Lua sarebbe eccessivo se si volesse semplicemente avere schemi di movimento.

Tra: l'ho già fatto per uno sparatutto spaziale, ma per il comportamento nemico. Ha funzionato bene, quindi potresti davvero provarlo.


Sto usando AS e non si presta molto bene all'utilizzo di risorse locali, tuttavia l'uso di un linguaggio di scripting o XML potrebbe essere utile per me, quindi grazie per il suggerimento.
IAE

2

Ero nella stessa identica situazione qualche tempo fa e ho iniziato a implementare la mia architettura per i modelli di proiettili. Ho rinunciato, però, perché mi sono imbattuto in un'implementazione di BulletML per C # / XNA: BulletML C #

Ho dovuto apportare alcune modifiche, ma ora creare modelli che sembrano spettacolari è davvero molto semplice. C'è una grande demo qui che ti mostra come, alcune righe di XML, possono creare fantastici modelli.

Se stai lavorando su C #, consiglio vivamente di evitare di reinventare la ruota. Soprattutto se vuoi avere schemi molto complessi. Potrebbe volerci del tempo per avvolgere la testa attorno a BulletML, ma, secondo me, vale la pena dedicare del tempo.

Tuttavia, se decidi di non utilizzare BulletML, allora, almeno, dai un'occhiata al codice C # e ottieni un'idea della sua architettura. Potrebbe darti alcune idee.


Grazie! Ho appena iniziato ad abbandonare ActionScript per questo progetto e ora lo sto scrivendo in C # / XNA. Daremo sicuramente un'occhiata al codice, grazie.
IAE
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.