Domanda

Sono sicuro che ci sia una soluzione di design pattern per il mio problema, ma io non riesco a decidere che cosa un approccio praticabile è. Io so quello che voglio, sto solo avendo problemi a fare i collegamenti ... mi spiego meglio:

Sto lavorando su un gioco. Ho GameObjects. Ho GameBehaviors. Le proprietà dei miei GameObjects sono definiti in un file XML, che ha tutti i dettagli.

<type name="Object">
    <unit name="follower" behavior="followMouse" >
        ...other unit info here...
    </unit>
</type>

Così come un gameObject è istanziato, in base al valore della proprietà comportamento nel XML, in qualche modo ha il comportamento collegato ad esso. Ho bisogno il comportamento di essere in grado di accedere a tutte le proprietà del suo genitore, in modo tale che essa può dire spostare l'oggetto intorno e che cosa non ...

Non ho molta esperienza con i modelli di progettazione ... e un certo numero di loro sembrano come se fossero quasi subito ma nessuno degli esempi che ho letto sembrano rendere clicca per me.

sto lavorando con AS3, ma sentitevi liberi di renderlo po 'più generale.

È stato utile?

Soluzione

mi piacerebbe suggerimento usando la composizione, anche se il vostro obiettivo primario dovrebbe essere trovare una buona soluzione (affidabile, estensibile e mantenibile) piuttosto che utilizzare un modello di progettazione di nome.

Così il vostro oggetto di gioco potrebbe avere un metodo initFromXML (XML), o forse ha un metodo factory statico che prende XML come argomento. Questo analizza il xml e cerca i comportamenti e quindi crea il comportamento appropriato. Creare il comportamento potrebbe essere fatto con un altro stabilimento.

È quindi possibile aggiungere il comportamento al gioco oggetti lista comportamenti. I comportamenti potrebbero essere tutti gli oggetti discendono da una classe comune, o potrebbero tutte implementare un'interfaccia IBehavior.

I comportamenti possono fare le loro cose sia per essere stato chiamato da oggetto di gioco, o con l'aggiunta di listener di eventi.

Altri suggerimenti

Credo di capire il vostro approccio.

Questo esce molto in giochi perché si dispone di un numero infinito di effetti, lo stato, i comportamenti, ecc, potenzialmente.

Quello che vedo nel vostro problema è avete a che fare più con le cose funzionali come "non presente seguire questo mouse", "fa questo risponde ai comandi da tastiera", ecc ...

In questo caso ciò che si può fare è creare classi funzionali come "MouseFollower" o "KeyboardResponder" che genericamente accettano un GameObject come argomento del loro costruttore.

Gli oggetti possono quindi applicare i gestori di eventi direttamente al GameObject come eventlisteners.

È possibile memorizzare tutti i tuoi oggetti funzionali in un array all'interno della GameObject in caso di necessità di rimuoverli.

Quando sono in un array, si può anche fare raffreddare ancora piace creare un'interfaccia di classe funzionale con un insieme uniforme di metodi. Quindi se, per esempio, il GameObject sono stati resi inattivi o disabili, si potrebbe dire

for each IFunctionalObject in GameObject.FunctionalObjects
IFunctionalObject.disable()

Credo che questo approccio potrebbe essere tollerabile se si ha davvero una grande varietà di oggetti di gioco, e suppongo che un gioco di ruolo sarebbe un esempio decente in cui si gestisce un gran numero di sprite di funzionalità diversa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top