Come gestire il gioco "animato" in cui l'immagine deve "animare" invece di cambiare bruscamente?

0

Ho giocato in giro e ho imparato javascript / KineticJS creando alcuni giochi semplici (pensa come giochi da tavolo).

Ho il modello di gioco relativamente semplice dal punto di vista logico. Quando una "mossa" viene assegnata al mio modello di gioco, aggiorna le proprietà di tutti i pezzi.

Tuttavia, mi piacerebbe che la vista avesse qualche animazione carina. Ad esempio, quando vengono presi sei pezzi, non voglio che scompaiano tutti insieme, preferisco che si animino 1 per 1.

Per risolvere questo problema, in pratica ho il modello del gioco che dice al mio punto di vista "Ho aggiornato i seguenti pezzi: [list]" E la mia vista li aggiunge a una "coda di aggiornamento visivo" che un thread del timer controlla e gestisce sempre uno da uno ogni volta che si innesca.

Sono interessato a qualsiasi opinione su questo approccio, e poiché questo è stato ovviamente considerato prima, se qualcuno di voi gestisce questo problema in modo diverso.

Grazie!

    
posta cemulate 05.04.2013 - 10:42
fonte

1 risposta

1

Un approccio comune è avere un ciclo principale che chiama tutti gli oggetti di gioco visibili beginFrame(time_diff) con un valore temporale. Quel valore temporale è il delta-time (millisecondi) dall'ultima volta che è stato chiamato.

Ciò di cui hai bisogno è una specie di sistema di interpolazione basato su time_diff. Ad esempio, è possibile aggiornare il valore alfa in base a time_diff e alcune interpolazioni del valore alfa. Quindi essenzialmente aggiungi animazioni a specifici oggetti di scena. Ad esempio:

"Su piece_1 Interpola linearmente il valore alfa da 0 a 1 con durata 1,5 secondi"

In questo modo gestisci tutti i tuoi oggetti di gioco (oggetti scena) nello stesso modo prevedibile.

Ovviamente, questo richiede un po 'di lavoro da implementare, quindi potresti voler controllare qualche framework di gioco esistente che ti fornisce questo, per esempio Sparrow . È per ObjC ma l'autore descrive il processo abbastanza bene. Sparrow non usa un ciclo principale, ma usa eventi. Quindi ogni oggetto di gioco deve registrarsi con il dispatcher dell'evento, ma l'idea è la stessa.

    
risposta data 05.04.2013 - 11:12
fonte

Leggi altre domande sui tag