Implementazione di un programmatore eventi per animazioni

2

L'idea di base è di avere alcuni widget animati che si trovano in un contenitore, abbastanza simile a Qt (l'unica vera differenza è che i miei widget sono animati).

In alcuni casi l'animazione dipende dal "tempo" corrente (ad esempio il numero di fotogramma) e presenta alcuni "eventi". Per spiegarlo meglio, prendiamo ad esempio una linea. Per creare un effetto interessante, potrei volere che nei primi 100 fotogrammi la linea "cresca" da sinistra a destra, e poi rimanga ferma. Quindi l'animazione della linea è fondamentalmente divisa in un'introduzione e il ciclo principale.

Il problema è come costruire l'architettura di questa animazione / gestione degli eventi? Il mio attuale approccio è di avere una classe animata che tenga traccia del tempo (ha un contatore incrementato ogni volta che il widget viene ridisegnato, in pratica su ciascun fotogramma). Inoltre, ha alcuni metodi che impostano gli eventi dell'animazione (vale a dire per 100 frame, intro, quindi il loop principale) e alcuni che incrementano il frame counter e recuperano l'evento corrente. Gli eventi sono memorizzati in un array e hanno un nome / id e una durata (quindi ottenere l'evento corrente è abbastanza semplice, in base al numero di fotogramma corrente). Quindi, ho dei widget che ereditano Animated e, quando sono disegnati, controllano l'evento corrente e intraprendono azioni specifiche.

Non mi interessa il fatto che l'animazione sia definita in questo modo dall'oggetto stesso, ma non mi piace la classe Animated, poiché fondamentalmente ogni oggetto ha un "clock" diverso. Inoltre, mi piacerebbe essere in grado di controllare l'animazione di ogni widget (cioè essere in grado di accorciare / allungare la durata degli eventi). Nell'attuale approccio, posso farlo, ma devo impostare gli eventi dall'esterno (il problema principale è che ho bisogno di conoscere il nome degli eventi e il loro significato).

C'è un modo migliore per farlo?

    
posta Paul92 18.04.2016 - 00:00
fonte

3 risposte

1

Se utilizzi i numeri di fotogramma come riferimento, l'animazione potrebbe essere più veloce o più lenta, a seconda di quanto è buono il PC.

Un approccio migliore sarebbe avere eventi a tempo e aggiornare l'animazione in base a questi.

A proposito, in qt è possibile fare quello che vuoi. I widget animati sono facili da fare. Gestisci un evento del timer e fai del pain personalizzato del widget. Qt ti offre tutti i tipi di eventi che puoi immaginare.

    
risposta data 19.04.2016 - 09:48
fonte
0

Perché anche tu potresti iniziare a implementare questo è al di là di me. Qt ha strumenti del genere per tali animazioni già sul posto sia per i suoi widget che per qml (il lato qml è leggermente più conveniente). Se qt non è possibile, ci sono probabilmente numerose altre librerie.

    
risposta data 22.04.2016 - 08:14
fonte
0

Mi sembra una macchina a stati. Crea una serie di eventi e alla fine di uno inizia l'inizio di quello successivo. La linea che cresce sarebbe uno stato (con uno stato che rappresenta la lunghezza corrente), quindi la linea a lunghezza intera (forse pulsante o qualcosa) sarebbe un altro stato. Quindi, forse un evento potrebbe innescare una "chiusura" anche quando la linea si restringe. Ma è solo un elenco di stati in coda che vengono trasferiti tra loro mentre scadono o un evento esterno attiva una modifica a un altro.

Inoltre, come altri hanno detto, non utilizzare il conteggio dei fotogrammi, utilizza l'ora effettiva del sistema.

    
risposta data 21.06.2016 - 09:28
fonte

Leggi altre domande sui tag