Domanda

Nel mio tempo libero programma di giochi come un hobby, diversi tipi di cose e, attualmente, nulla di particolarmente complesso.Le cose piace sparatutto 2d, Tile-Based giochi, giochi Puzzle, ecc...

Tuttavia, come lo sviluppo di questi giochi va avanti trovo diventa difficile gestire la complessità dei vari sottosistemi all'interno dei giochi, cose come l'Interfaccia, la visione del Mondo/il Modello, la Gestione degli Eventi, gli Stati (Menu, Pausa, ecc...), Effetti Speciali e così via.

I tentativi di mantenere i collegamenti al minimo e ridurre l'accoppiamento tuttavia, molti di questi sistemi hanno bisogno di parlare, in un modo o in un altro che non richiedono tenendo la vostra intera base di codice nella vostra testa in una sola volta.

Attualmente cerco di delegare diversi sottosistemi e del sottosistema di funzioni a diversi oggetti che sono raggruppati insieme, tuttavia non ho trovato una strategia di comunicazione che è disaccoppiato abbastanza.

Che tipo di tecniche è possibile utilizzare per aiutare me a destreggiarsi tra i vari sottosistemi e di gestire la complessità di un sempre crescente di sistema che deve essere modulare abbastanza per facilitare il rapido mutare delle esigenze?

Spesso mi trovo a porre le stesse domande:

  • Come gli oggetti comunicano tra di loro?
  • Dove il codice che gestisce specifici sottosistemi andare?
  • Quanto della mia base di codice devo pensare di un tempo?
  • Come posso ridurre l'accoppiamento tra gioco di entità?
È stato utile?

Soluzione

Ah, se solo ci fosse una buona risposta alla tua domanda.Quindi lo sviluppo del gioco non sarebbe così difficile, rischioso e richiede tempo.

Cerco di mantenere il collegamento con l' minimo e ridurre l'accoppiamento tuttavia molti di questi sistemi hanno bisogno di parlare in in un modo o in un altro, che non richiedono tenendo la vostra intera base di codice nella tua testa in una sola volta.

Che fanno, ma spesso non hanno bisogno di parlare in un modo abbastanza diretto un modo come le persone prima di tutto credere.Per esempio, è comune avere il gioco push valori nella sua interfaccia grafica ogni volta che qualcosa cambia.Se, invece, si può semplicemente memorizzare i valori e lasciare che la query GUI (per esempio tramite un pattern observer), è stato rimosso tutti GUI riferimenti da gioco stato.Spesso basta semplicemente chiedere se un sottosistema può estrarre le informazioni di cui ha bisogno da una semplice interfaccia, invece di dover spingere i dati.

  • Come gli oggetti comunicano tra di loro?
  • Dove il codice che gestisce specifici sottosistemi andare?
  • Quanto della mia base di codice devo pensare di un tempo?
  • Come posso ridurre l'accoppiamento tra gioco di entità?

Niente di tutto questo è veramente specifico per i giochi, ma è un problema che si pone spesso con giochi, perché ci sono così tanti disparati sottosistemi che non abbiamo ancora sviluppato approcci standard per.Se si prende di sviluppo web, quindi ci sono in realtà solo un piccolo numero di paradigmi stabiliti:l' "un modello/codice file per URI" di qualcosa, come ad esempio PHP, o forse il "model/view-modello/controller" approccio di RoR, Django, più un paio di altri.Ma per i giochi, tutti rotolando loro.

Ma una cosa è chiara:non è possibile risolvere il problema chiedendo "Come oggetti comunicare'.Ci sono molti diversi tipi di oggetto e richiedono approcci diversi.Non provare e trovare una soluzione globale per adattarsi ad ogni parte del vostro gioco - ingresso, rete, audio, fisica, intelligenza artificiale, rendering, messa in serie - non sta andando per accadere.Se si tenta di scrivere una qualsiasi applicazione, cercando di trovare un perfetto IObject interfaccia che si adatta ad ogni scopo, quindi si perde.La risoluzione di singoli problemi prima e poi cercare la comunanza, refactoring, come si va.Il codice deve prima essere utilizzabile prima di poter essere anche considerati riutilizzabili.

Gioco sottosistemi live, a qualsiasi livello, hanno bisogno di non più alto.In genere ho un alto livello di App, che possiede la Grafica, il Suono, l'Ingresso, e oggetti del Gioco (tra gli altri).Il Gioco in oggetto possiede la Mappa o Mondo, i Giocatori, i non-giocatori, le cose che definire tali oggetti, etc.

Gioco distinto stati, si può essere un po ' complicato, ma in realtà, non è così importante come le persone assumono sono.La pausa può essere codificato come un valore booleano che, se impostato, semplicemente di disattivare AI/fisica aggiornamenti.I menu possono essere codificati come semplice interfaccia grafica di sovrapposizioni.Così il vostro 'stato menu' semplicemente diventa un caso di mettere il gioco in pausa e che mostra il menu, e unpausing il gioco quando il menu viene chiuso senza l'esplicita la gestione dello stato richiesto.

Ridurre l'accoppiamento tra entità gioco è abbastanza facile, di nuovo fino a quando non si dispone di un amorfo idea di cosa sia un gioco di entità che porta a tutto ciò la necessità di potenzialmente parlare di tutto.Personaggi di un gioco di genere vivono all'interno di una Mappa o di un Mondo, che è essenzialmente un database spaziale (tra le altre cose) e richiedere il Mondo si nelle vicinanze di personaggi e oggetti, senza bisogno di contenere riferimenti diretti a loro.

Nel complesso, però basta utilizzare un buon software di sviluppo di regole per il codice.La cosa principale è quello di mantenere le interfacce semplici e di piccole dimensioni, e incentrato su un solo aspetto.Accoppiamento e la capacità di concentrarsi su aree più piccole del codice fluisce naturalmente da che.

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