Introduzione
Il Sensor Delay ha la funzione di ritardare l’invio dell’impulso positivo (in maniera diversa dalle opzioni comuni dei Sensors), infatti può inviare un solo segnale oppure ripeterlo all’infinito con la variante della durata. Sia il ritardo che la durata sono misurati in frame per second.
Opzioni
- Delay numero di frame che il Sensor aspetta prima di inviare il segnale.
- Duration numero di frame che il Sensor aspetta prima di interrompere il segnale positivo, quindi ne invia uno negativo.
- Repeat ripete il segnale ciclicamente.
N.B. I due valori si sommano, quindi se impostiamo entrambi i valori a 60 il ritardo sarà di 2 secondi (il frame rate di default è 60).
Python
Il Sensor Delay ha solo tre attributi, come spiegato precedentemente, e si possono richiamare così
import bge cont = bge.logic.getCurrentController() own = cont.owner sens_delay = cont.sensors['delay'] # attributi in lettura delay = sens_delay.delay # int duration = sens_delay.duration # int repeat = sens_delay.repeat # bloolean # stampa degl'attributi print (delay, duration, repeat) # attributi in scrittura sens_delay.delay = 60 # int da 0 a 5000 sens_delay.duration = 15 # int da 0 a 5000 sens_delay.repeat = True # boolean
Gli attributi funzionano esattamente come i valori che si possono impostare nel Mattone manualmente, la differenza è che con il codice si può cambiare a runtime ogni singolo valore. Nello script la linea che stampa gli attributi mostra nella console al primo tick 0 0 False perché il codice in scrittura viene dopo, quindi quando il motore di gioco parte, al primo tick invia lo stato degli attributi, quello scritto sopra, e in seguito cambia i valori in 60 15 True. Spostando gli attributi di scrittura in alto a quelli di lettura quando il motore parte il Mattone inizia a inviare l’impulso con quei dati. Faccio un piccolo esempio per mostrare come poter cambiare i valori in run time.
Esempio
Aggiungi un Sensor Keyboard e rinominalo spazio e imposta il tasto barraspaziatrice (puoi usare il nome e il tasto che vuoi non è rilevante per questo esempio); collegalo al controller Python, adesso cambio il codice degl’attributi in scrittura facendolo diventare una funzione, così
# scrittura def write(): sens_delay.delay = 60 # da 0 a 5000 sens_delay.duration = 15 # da 0 a 5000 sens_delay.repeat = True # boolean
Inserisco il Sensor Keyboard
sens_spazio = cont.sensors['spazio']
Scrivo un’istruzione condizionale che dice : ‘ se il sens_spazio è positivo, esegui la def write() e stampa a video gli attributi ‘
if sens_spazio.positive: write() print (delay, duration, repeat)
Il codice risponde esattamente alle aspettative, imposta i valori nel Sensor Delay una volta premuto il tasto. Questo ti fa capire com’è possibile impostare un determinato ritardo delle azioni a seconda delle tue esigenze. Posto il codice finale
import bge cont = bge.logic.getCurrentController() own = cont.owner sens_delay = cont.sensors['delay'] sens_spazio = cont.sensors['spazio'] # lettura delay = sens_delay.delay duration = sens_delay.duration repeat = sens_delay.repeat # scrittura def write(): sens_delay.delay = 60 # da 0 a 5000 sens_delay.duration = 15 # da 0 a 5000 sens_delay.repeat = True # boolean if sens_spazio.positive: write() print (delay, duration, repeat)