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)

 

 

Leave a Comment.