Categoria:PrincipiBase:Stati
Da Second Life Italia Wiki.
Indice |
[modifica] Stati
Il Linden Script Language (LSL) può essere definito come un linguaggio object oriented, in quanto le entità di Second Life animabili tramite script sono appunto oggetti. Come tale, perciò, prevede la presenza di stati, eventi e funzioni.
[modifica] Cosa sono gli stati
Supponiamo di voler creare l'oggetto Interruttore, in grado di accendere e spegnere una lampadina. Esso avrà due stati: acceso e spento:
- spento: quando l'interruttore è in stato spento lo possiamo usare solo per accendere la luce;
- acceso: quando l'interruttore è in stato acceso lo possiamo usare solo per spegnere la luce.
Lo stato è un insieme di proprietà, funzioni ed eventi relativi all'oggetto; quando si passa dallo stato spento allo stato acceso, le funzioni e le proprietà dello stato precedente vengono sostituite da quelle dello stato successivo. Completiamo ora l'esempio:
spento
-> proprietà: l'oggetto è di colore rosso
-> funzioni: "Accendi la lampadina"
acceso
-> proprietà: l'oggetto è di colore verde
-> funzioni: "Spegni la lampadina"
[modifica] Esempio usando gli stati
AccendiLampadina()
{
llSay(0, "ON");
}
SpegniLampadina()
{
llSay(0, "OFF");
}
default
{
state_entry()
{
state spento;
}
}
state spento
{
state_entry()
{
llSetColor(<1,0,0>, ALL_SIDES);
}
touch_start(integer total_num)
{
AccendiLampadina();
state acceso;
}
}
state acceso
{
state_entry()
{
llSetColor(<0,1,0>, ALL_SIDES);
}
touch_start(integer total_num)
{
SpegniLampadina();
state spento;
}
}
L'interruttore entrerà nello stato default per poi passare subito a spento; qui il suo colore verrà impostato a rosso e la sua unica funzionalità sarà AccendiLampadina (scatterà all'evento Touch_start). A questo punto, se verrà toccato (touch) il suo stato diverrà acceso, perciò la proprietà del colore passerà a verde e la sua unica funzionalità sarà ora SpegniLampadina (scatterà all'evento Touch_start).
Come vedete, le due funzioni scattano entrambe nell'evento Touch_start, ma AccendiLampadina sarà attivabile solo quando lo script è in stato spento e SpegniLampadina sarà attivabile solo quando lo script è in stato acceso.
Lo stesso script può essere realizzato senza l'utilizzo degli stati, ed il risultato sarebbe questo:
[modifica] Esempio senza gli stati
string stato_interruttore;
AccendiLampadina()
{
llSay(0, "ON");
}
SpegniLampadina()
{
llSay(0, "OFF");
}
default
{
state_entry()
{
stato_interruttore = "OFF"
llSetColor(<0,1,0>, ALL_SIDES);
}
touch_start(integer total_num)
{
if (stato_interruttore == "OFF")
{
llSetColor(<0,1,0>, ALL_SIDES);
AccendiLampadina();
stato_interruttore = "ON";
}
else
if (stato_interruttore == "ON")
{
llSetColor(<1,0,0>, ALL_SIDES);
SpegniLampadina();
stato_interruttore = "OFF";
}
}
}
NOTA BENE Lo stato default è uno stato ed è obbligatorio! Tutti gli script LSL devono avere quantomeno lo stato default per funzionare.
Pagine nella categoria "PrincipiBase:Stati"
Questa categoria contiene 0 pagine.
