Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Le animazioni 3 – Riprodurle nel GE


Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Una volta creata l’animazione semplice di un’oggetto per riprodurla devi inserire una linea di Mattoni e impostare le opzioni dell’Actuator Action per riprodurla come desideri. Userò il file degl’articoli precedenti scaricabile QUA, puoi anche usare un’animazione creata da te. Una cosa importante da capire in questo caso è che l’Actuator Action non va in esecuzione da solo, cioè una volta impostato non partirà l’animazione (tranne se si usa un Sensor Always), questo perché nel momento in cui parte il motore di gioco l’Actuator aspetta l’impulso per cambiare il suo stato in TRUE e fare partire l’animazione. Tale impulso viene dato dal Controller che a sua volta ne riceve uno da un Sensor, o più di uno, collegato ad esso. L’impulso del Sensor, e quindi la scelta del Sensor adatto alla tua situazione, dipende molto dal tipo di oggetto di Scena, ad esempio l’animazione di una porta può essere innescata da diversi Sensor, quando ci si avvicina (Sensor Near o Radar o Ray), dalla pressione di un tasto quando il Player è vicino ad essa (Sensor Near e un Keyboard collegati allo stesso Controller). 

Riproduzione 

Play e Ping Pong

Inserisci un Sensor Keyboard, collegalo ad un Controller And, inserisci un’Actuator Action e collegalo al Controller. Come avrai visto nella scheda dell’Actuator Action, le impostazioni ci permettono di riprodurre l’animazione a nostro piacimento; i parametri base per poter riprodurre un’animazione sono il nome dell’animazione (leggi l’articolo precedente per sapere come si cambia il nome) e i frame di partenza e di fine della nostra animazione, nel caso del cubo animato in precedenza sono da 1 a 240. Quindi l’Actuator avrà le impostazioni come nella figura seguente

Fai partire il motore di gioco e premuto il tasto da te scelto partirà l’animazione dall’inizio alla fine senza possibilità di fermarla, questo perché l’opzione di riproduzione è impostata su Play. Si può anche limitare la riproduzione impostando un numero di frame finale diverso. Mettiamo che voglio che il cubo faccia solo mezza animazione imposto il numero a 120, in questo modo il cubo si fermerò a metà, ma se premo nuovamente il tasto l’animazione parte dal primo frame. Se voglio che il cubo faccia la strada al contrario devo impostare l’opzione di riproduzione su Ping Pong, in questo modo ogni volta che il cubo si ferma, sia nel frame 1 che nel frame 120, posso fare ripartire l’animazione da quel punto; se si usa un Sensor Always l’animazione viene riprodotta in ciclo. Fai partire il motore di gioco e prova anche cambiando il Keyoboard con un Always.

Flipper

Questa opzione di riproduzione ha la particolarità di riprodurre l’animazione fino a quando il Sensor è positivo, quando diventa negativo l’animazione si riavvolge al contrario. Impostala e fai partire il motore di gioco, se hai il Sensor Keyboard impostato puoi notare che fino a quando tieni premuto il tasto il cubo esegue l’animazione, quando rilasci il tasto il cubo torna alla posizione iniziale progressivamente; questo tipo di opzione non funziona con il Sensor Always perché riproduce l’animazione come se fosse impostata su Play. Questa opzione può essere utile in diverse occasioni, dipende sempre da come si vuole far muovere l’oggetto nella scena, un’applicazione è per una porta (sia scorrevole che normale), usando un Sensor Near quando il Player non viene più individuato il Sensor diventa negativo e l’animazione si riavvolge. 

Loop Stop

Questa opzione riproduce l’animazione fino a quando l’impulso è positivo, quando diventa negativo l’animazione si blocca immediatamente. Lo puoi notare se fai partire il motore e tieni premuto il tasto, quando lo rilasci l’animazione si blocca. Questa opzione ha diverse applicazioni, può riprodurre un’azione quando il Player si trova in una determinata area del gioco, oppure si può accoppiare ad una Property per assegnarle un numero. Faccio questo esempio che mi sembra interessante. Aggiungi una Property Integer (per questo esempio non importa darle un nome, ma ti ricordo che è importantissimo rinominare ogni oggetto del gioco), quindi fai in modo di mostrarla in debug, se non sai come si fa ti consiglio di leggere la pagina della Property, questo solo perché voglio vedere l’andamento della Property. Adesso imposta la Property nell’ultima opzione dell’Actuator Action, Frame Property; facendo partire il motore di gioco puoi vedere la Property in debug crescere di valore in accoppiata al numero dei frame dell’azione. Il valore cresce a seconda dell’impostazione dell’ Animation Frame Rate, fai delle prove per vederne l’effetto. Questo può essere utile per innescare diverse condizioni a seconda del valore che la Property assume quando scorre o quando si ferma. Non è questo l’ambito per mostrare un’esempio sulla Property, ma usando le varie opzione del Sensor Property si può determinare a quale valore numerico si vuole innescare un processo.

Loop End

Questa opzione riproduce l’animazione dall’inizio alla fine quando l’Actuator riceve un’impulso positivo.

Property

E’ l’opzione più interessante, perché a differenza dell’opzione finale Frame Property, questa riproduce l’animazione in relazione al valore di una Property. Spesso viene usata per la barra dell’energia, ma può essere usata anche in maniera diversa. 

Esempio 1

Cambia il Sensor Keyboard della linea dell’Actuator Action con un Sensor Property e imposta l’Evaluation Type su Changed, in questo modo quando la Property cambia l’Actuator Action riceve un’impulso positivo. Adesso bisogna fare in modo di incrementare la Property, inserisci un Sensor Always e clicca sul True Level Trigger (il tasto con i puntini in alto in modo da mandare un’impulso ogni frame), un Controller AND, e un’Actuator Property imposta il Mode su Add, la Property e il Value su 1 (puoi inserire un numero diverso se vuoi che il cubo si muova più velocemente, in questo modo l’animazione salterà dei frame a seconda del numero che inserisci), collegali tra di loro. Inserisco un’immagine di questa serie di Mattoni

Fai partire il motore, come puoi notare l’animazione viene riprodotta normalmente e il valore della Property sale in modo esponenziale, però quando l’animazione finisce la Property continua a salire di valore, questo perché i frame sono solo 240, bisogna dire a Blender che quando la Property raggiunge 240 parte da 1. 

Esempio 2

Si può spostare il cubo lungo l’animazione impostando la Property in modo casuale. Fai un Full Copy della scena, se non sai come si fa leggi QUA, in questo modo non perdi questo esempio. Elimina il Sensor Always e inseriscine uno Keyboard (usa il tasto che preferisci), cancella l’Actuator Property e inseriscine uno Random, collegali tra di loro al Controller AND. Imposta sull’Actuator Random l’opzione Distribution su Integer Uniform, lascia il Seed a 0, imposta la Property e i valori Min a 1 e Max a 240, questi valori sono specifici per questo esempio. Inserisco un’immagine

Ogni qualvolta viene premuto il tasto il valore della Property viene impostato casualmente tra i numeri 1 e 240, in questo modo il cubo si sposterà sul frame dell’animazione con quel numero. Fai partire il motore. Questo esempio è utile per capire come si imposta una Property in modo casuale (random), ha diverse applicazioni, ma nell’esempio specifico può dare una posizione casuale ad un’oggetto di scena per fare in modo di evitare automatismi ripetitivi al proprio gioco, magari automatizzando il cambio di valore della Property ogni tot di tempo.

Per concludere ti ricordo che sperimentare aiuta a capire di più il motore e ti porta a scoprire cose che ti potrebbero essere utili nei tuoi giochi. Nel prossimo articolo l’animazione di un personaggio. 


Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1

Warning: file_exists(): open_basedir restriction in effect. File(/tmp/rvpuuusc.txt) is not within the allowed path(s): (/membri/blendergameengineitalia/:/membri2/blendergameengineitalia/:/membri/.dummy/) in /membri/blendergameengineitalia/wp-includes/plugin.php(437) : runtime-created function on line 1