Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Salahzar Stenvaag
- ALI - Accademia delle Land Italiane
- Script Base
- Uso Eventi: Timer
- Prerequisiti:
- - sapete rezzare un oggetto
- - sapete costruire lo script Hello Avatar
- - sapete cosa sono gli eventi touch_start e state_entry
- - sapete editare uno script
- 0. L'uso del timer è spesso essenziale negli script per fare moltissime cose:
- * lanciare eventi ogni x secondi
- * aspettare un certo ammontare di tempo prima di eseguire una operazione
- * creare animazioni su scritte / immagini / movimenti
- * dare un intervallo di tempo massimo per eseguire operazioni (timeout)
- * altre (...)
- 1. La teoria:
- Come tutti o quasi gli eventi è sempre spezzato in due: l'impostazione e la ricezione:
- Impostazione:
- llSetTimerEvent(float numerosecondi);
- evento:
- timer()
- {
- .....
- }
- NOTA1. dopo numerosecondi scatta l'evento (ma attenzione, l'evento si ripete ANCHE dopo).
- NOTA2. se numerosecondi è zero, il timer è disabilitato
- NOTA3. ci può essere un solo timer anche se con qualche trucco possiamo crearcene di "virtuali"
- NOTA4. visto che l'evento timer() è "povero" ci si basa molto su variabili globali
- Costruite un oggetto e chiamatelo con il vostro nome + il nome dell'esercizio ed inserite gli script come indicato qui sotto facendo new script e copiando ed incollando dalla notecard.
- Ogni volta che cambiate esercizio fate "take" dell'oggetto vecchio nel vostro inventory e rezzatene uno nuovo.
- 2. Lanciare eventi ogni x secondi.
- Questo script dice qualcosa ogni 10 secondi accumulando i secondi.
- Nota: non scatta subito ma aspetta 10 secondi prima di partire. L'output sarà:
- Evento scattato, sono passati 10.000000 secondi
- Evento scattato, sono passati 20.000000 secondi
- etc.
- Notate che questo script se toccato si "spegne" o si accende in modo da poter "controllare" il suo comportamento.
- Notate l'uso dei colori e della "scrittura muta" llsettext per avere una rappresentazione visiva dell'oggetto.
- // ALI
- // Lezioni a cura di Salahzar Stenvaag
- // Sezione 2: Lancio eventi ogni 10 secondi
- // Giugno 2008
- float fTOTALE=0;
- float fINTERVALLO=5;
- integer iATTIVO=1;
- vector vROSSO=<1,0,0>;
- vector vGIALLO=<1,1,0>;
- vector vVERDE=<0,1,0>;
- // per semplificare la scrittura muta
- info(string str)
- {
- llSetText(str,vGIALLO,1);
- }
- default
- {
- state_entry()
- {
- info("Sezione 2\nLancio eventi ogni x secondi");
- llSetTimerEvent(fINTERVALLO);
- iATTIVO=1;
- llSetColor(vVERDE,ALL_SIDES); // il cubo è verde
- }
- timer()
- {
- llSetColor(vGIALLO,ALL_SIDES); llSleep(0.1); // lo sleep è essenziale per vedere il giallo
- fTOTALE+=fINTERVALLO;
- info("Evento scattato, \nsono passati \n"+(string)fTOTALE+" secondi");
- llSetColor(vVERDE,ALL_SIDES);
- }
- touch_start(integer count)
- {
- if(iATTIVO==1)
- {
- iATTIVO=0;
- llSetTimerEvent(0); // toglie il timer
- llSetColor(vROSSO,ALL_SIDES); // verde
- info("Eventi disattivati"); // informa
- }
- else
- {
- iATTIVO=1;
- llSetTimerEvent(fINTERVALLO); // rimette il timer
- llSetColor(vVERDE,ALL_SIDES); // rosso = stoppato
- info("Eventi attivati");
- }
- }
- }
- 3. Variante che "scatta subito"
- Questo è un piccolo trucco per fare sì che l'evento scatti subito e poi si disponga all'intervallo voluto:
- // ALI
- // Lezioni a cura di Salahzar Stenvaag
- // Sezione 3: Lancio eventi subito ed ogni 10 secondi
- // Giugno 2008
- float fTOTALE=0;
- float fINTERVALLO=5;
- integer iATTIVO=1;
- vector vROSSO=<1,0,0>;
- vector vGIALLO=<1,1,0>;
- vector vVERDE=<0,1,0>;
- // per semplificare la scrittura muta
- info(string str)
- {
- llSetText(str,vGIALLO,1);
- }
- default
- {
- state_entry()
- {
- info("Sezione 3\nLancio eventi subito");
- //************************************(1)
- iATTIVO=0;
- llSetTimerEvent(0.1); // <----- SCATTA SUBITO
- //************************************
- llSetColor(vVERDE,ALL_SIDES); // il cubo è verde
- }
- timer()
- {
- //*************************************(2)
- if(iATTIVO==0)
- {
- llSetTimerEvent(fINTERVALLO);
- iATTIVO=1;
- }
- else fTOTALE+=fINTERVALLO; // l'incremento non lo fa all'inizio
- //*************************************
- llSetColor(vGIALLO,ALL_SIDES); llSleep(0.1); // lo sleep è essenziale per vedere il giallo
- info("Evento scattato, \nsono passati \n"+(string)fTOTALE+" secondi");
- llSetColor(vVERDE,ALL_SIDES);
- }
- touch_start(integer count)
- {
- if(iATTIVO==1)
- {
- iATTIVO=0;
- llSetTimerEvent(0); // toglie il timer
- llSetColor(vROSSO,ALL_SIDES); // verde
- info("Eventi disattivati"); // informa
- }
- else
- {
- //*******************************(3)
- llSetTimerEvent(0.1); //
- //*******************************
- info("Eventi attivati");
- }
- }
- }
- Le modifiche rispetto allo script precedente:
- (1): Nello state entry si mette attivo=0 e si mette un timer a 0.1 (scatta subito)
- (2): nel timer, se era precedentemente spento allora imposta il timer, stato messo attivo.
- L'incremento del contatore lo fa solo al secondo scatto (il primo serve solo per dare l'avvio).
- (3): nel touch_start sfruttiamo il fatto che il timer() adesso sa "accendersi".
- Sezione 4. Animazioni di scritte con un timer
- Usiamo un contatore ed un timer per produrre degli effetti sulle scritte (es. lampeggiante).
- float fALPHA=1; // trasparenza
- string sNOME="Frase che lampeggia";
- default
- {
- state_entry()
- {
- llSetText(sNOME,<1,1,0>,fALPHA);
- llSetTimerEvent(0.5);
- }
- timer()
- {
- if(fALPHA==0) fALPHA=1;
- else fALPHA=0;
- llSetText(sNOME,<1,1,0>,fALPHA);
- }
- }
- La stessa cosa la potete fare sull'intero prim per avere un prim che lampeggia.
- Sezione 5. Frase che cambia colore
- string sNOME="Frase che cambia colore";
- // gli 8 colori fondamentali
- list lCOLORS=[ <0,0,0>,<0,0,1>,<0,1,0>,<0,1,1>,<1,0,0>,<1,0,1>,<1,1,0>,<1,1,1>];
- integer iCURSORE=0; // va da 0 a 7
- mostra()
- {
- vector colore=(vector)llList2String(lCOLORS,iCURSORE);
- llSetText(sNOME,colore,1);
- }
- default
- {
- state_entry()
- {
- iCURSORE=0;
- mostra();
- llSetTimerEvent(0.5);
- }
- timer()
- {
- iCURSORE++;
- if(iCURSORE>7) iCURSORE=0; // cicla sui colori
- mostra();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement