Compartimentazione simile a MVC nei giochi? [chiuso]


19

Stavo contemplando la progettazione di un gioco (tradurre un gioco da tavolo sul computer, in particolare, che suppongo sia rilevante in questo caso) e mi è venuto in mente che avrebbe avuto senso costruire il "gioco" separato dal "display".

Mi permetterebbe di prototipare qualcosa rapidamente con una semplice interfaccia di testo, e poi di andare avanti in un secondo momento. Mi permetterebbe anche di trasferire il gioco su altri media più facilmente.

Questo tipo di compartimentazione è comune nei giochi? Dovrei provare a scomporre ulteriormente le cose? Ci sono complicazioni che potrei perdere?

Risposte:


7

Un gioco da tavolo è un buon esempio di gioco che potrebbe essere realizzato usando MVC, poiché la logica di gioco (modello) esiste in modo abbastanza indipendente dagli elementi visivi (vista). Tuttavia, se si considera un gioco d'azione come Gears of War, la geometria dei modelli 3D è intrinseca alla logica del gioco, quindi separare la vista come se fosse intercambiabile diventa inutile. Unity3D è un ottimo esempio di un modo più specifico per il gioco di organizzare il codice. Hai una classe di entità di base a cui aggiungi funzionalità con i componenti, in cui un componente potrebbe gestire il disegno dell'entità, uno gestire la logica di gioco ecc. Dai un'occhiata a questi famosi post sul blog sull'argomento:

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

http://gameprogrammingpatterns.com/component.html


MVC può funzionare bene per gli FPS, consultare gamasutra.com/features/20050414/rouwe_01.shtml per almeno un riferimento.
stonemetal

3
"... la geometria dei modelli 3D è intrinseca alla logica del gioco ..." Quindi la geometria diventa principalmente i dati del modello in modo da essere manipolata dal controller (in questo caso, influenza la fisica, quindi esiste con tutta l'altra fisica parametri) ai fini della logica di gioco. Se viene utilizzato anche per la vista, come in questo caso, viene considerato secondario, poiché la vera simulazione è il controller che influenza il modello; la vista è irrilevante. (Alcuni discutono sull'esistenza o meno dei dati di configurazione nel modello; dipende da te, ma il principio rimane lo stesso). Questo è un approccio purista.
Ingegnere

5

La mia opinione su di esso:

  • Il modello è dove si trovano la maggior parte dei dati e avviene tutta la logica.
    Legge una coda di eventi di input e modifica di conseguenza lo stato del gioco.
    Quindi elabora elementi come la fisica e altri componenti principali che aggiornano anche lo stato del gioco.
    Ciclo continuo. È tutto.
    L'obiettivo è rendere il modello indipendente: non ha alcuna dipendenza dalla vista o dal controller: dovresti essere in grado di creare un programma che esegue solo un modello.
  • La vista legge semplicemente lo stato di gioco del modello, aggiorna i propri componenti dedicati alla rappresentazione dei dati e visualizza le cose sullo schermo.
    Non scrive mai nulla sul modello, è un processo di sola lettura, tranne forse la registrazione di alcuni gestori di eventi (come "Hey Mister Model, quando rilevi una collisione tra questi due oggetti, chiama il mio gestore di eventi che riproduce un suono! ").
  • Il controller rileva gli eventi di input e li passa alla coda di input del modello. Legge la vista (questo clic sul pulsante è avvenuto su un pulsante UI?).

In questo modo è possibile collegare un controller falso che legge un file che contiene eventi di input preregistrati.
Crea anche una vista semplice che registra le cose su un file.
Molto utile per i test e il debug.

Ricorda di effettuare l'aggiornamento del modello a una velocità costante (intervallo di tempo fisso) e la vista e il controller il più velocemente possibile (ma non troppo variabili).


0

Questo tipo di compartimentazione è la divisione tra un motore e un codice di gioco ed è abbastanza comune. Lungo la strada c'è molto spazio per l'astrazione.

I dati grafici specifici del tuo motore e dei tuoi giochi potrebbero essere considerati come la vista, il tuo codice di gioco, il modello e il controller sarebbe qualunque colla tu usi per dire al tuo motore quale trama applicare a quale entità nel tuo codice di gioco.


2
Questo non è affatto vero. MVC definisce la separazione di stato (il modello) dall'interfaccia utente (la vista e il controller). Un "motore" è un framework generico su cui è possibile creare giochi e che può contenere gli elementi di base per il modello, la vista e il controller.
MikeWyatt,
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.