Second Life: Your World. Your Imagination.
Un Mondo Tridimensionale Online Immaginato, Creato e di Proprietà dei suoi Residenti...
home page
forum generale
forum aiuto
forum eventi/lavoro
blog
wiki / aiuto
cos'è Second Life
quanto costa?
info Minorenni
entra in SL!
  • Indice ‹ In Second Life ‹ Building e Creativita' - Creazione dei nostri contenuti ‹ Scripting LSL
  • Modifica dimensione carattere
  • Stampa pagina
  • RSS/ATOM
  • FAQ
  • Gallery
  • Iscriviti
  • Login

Corso di Scripting - SecondLearning

Programmazione in LSL (Linden Scripting Language). Come assegnare comportamenti e interattività agli oggetti in Second Life. Archivio di script, luoghi in-world ed esempi.

Moderatori: Kei, Trilly S

Rispondi al messaggio
3 messaggi • Pagina 1 di 1

Corso di Scripting - SecondLearning

Messaggiodi Francesco Guidolanda Arai » sab nov 10, 2007 5:28 pm

--> Perchè questo Thread ?:
- Per divulgare le nozioni di base dello Script e alcuni trucchetti del mestiere tramite immagini/schemi e animazioni/video che riprendono in modo dettagliato tutte le fasi necessarie per portare a termine il tutorial descritto
- L'apertura di questo thread non è finalizzata o orientata ad una ricerca di lavoro o di reddito ma è dettata solo da una genunina sperimentazione didattica fine a se stessa e svolta per semplice divertimento/soddisfazione.
- Il tutorial riprende le lezioni di Seconlearing. Le informazioni sono fornite esclusivamente a scopo didattico e rapprensentano solo una panoramica di quello che si può apprendere o un riassunto di quanto impartito per riflettere sulle nozioni ricevute a fine studio. E' fortemente consigliato seguire le lezioni che gli insegnanti della secondlearning sono in grado di fornire in diretta, seguendo gli alunni passo passo per correggerli in caso di errore.
- E' fortemente benvenuto qualsiasi modifica/perfezionamento/correzione del presente Tutorial

--> Premessa
- Secondlearning.it è un progetto di ricerca educativa, che ha come obiettivo l’individuazione di nuove metodologie didattiche attraverso l’utilizzo dei mondi virtuali
- Come si tengono i corsi (Video)
- immagini.
- Il Calendario è su base settimanale. Ogni lezione si ripeterà periodicamente e avrà sempre lo stesso contenuto (tranne Tips & Tricks) fino a Dicembre 2007

--> Thread Collegati:
- Prim Tutorial dell'Help Island
- Texture Tutorial dell'Help Island
- Showroom. Postate in questa vetrina i lavori realizzati

--> Argomenti trattati:
- Creazione di uno Scripting Semplice
- Tips & Tricks Come realizzare una porta che si apre al tocco

Scripting è un corso di base per chi vuole iniziare a capire la logica del Linden Script Language, il linguaggio di programmazione che sta dietro i comportamenti degli oggetti in Second Life. In questo caso, è consigliabile aver già frequentato il corso di Costruzione I.
Ultima modifica di Francesco Guidolanda Arai il sab nov 10, 2007 6:40 pm, modificato 2 volte in totale.
  • L'Olanda, il Diario Guida Viaggi
  • BlogOlanda, Il Blog dell'Olanda
Avatar utente
Francesco Guidolanda Arai
 
Messaggi: 1411
Iscritto il: mer ago 29, 2007 11:57 am
  • Sito web
Top

Messaggiodi Francesco Guidolanda Arai » sab nov 10, 2007 5:30 pm

* Creazione/Modifica Script semplice-Lez SecondLearning

- Cos'è e a Cosa serve il Linden Scripting Language
Il Linden Script Language (LSL) è il linguaggio di programmazione di Second Life il cui scopo è quello di dare dei comportamenti agli oggetti/Forme. Ad esempio con LSL è possibile fare in modo che una porta si apra al tocco o per far scorrere le slides di volta in volta in un una lavagna slide viewer, cliccando sul bottone 'avanti'

Per comprendere meglio è necessario prendere confidenza con tre conceti tipici di quasi tutti i linguaggi di programmazione:

1) Stato (Aperto o Chiuso, Acceso o Spento, ecc.)
2) Evento (da cui scaturisce una Reazione)
3) Funzione (come la Reazione deve avvenire o cosa deve far fare)

1) Es: La porta ha tipicamente due Stati: Chiuso e Aperto. Le persone hanno diversi stati (d'animo): sereno, nervoso, ecc.
2) Un oggetto o una persona può reagire in maniera differente ad un Evento a seconda dello Stato in cui si trova in quel momento. Es: se siamo sereni e qualcuno passando ci urta magari non ci facciamo nemmeno caso. Mentre se siamo nervosi magari ci vien voglia di attaccar briga. Una porta Chiusa (Stato On), se si tocca (Evento), reagisce aprendosi (Stato Off). Ma la stessa porta se Aperta (Stato Off), reagisce Chiudendosi (Stato On) allo stesso Evento (tocco).
3) Funzione attraverso la quale, una porta si apre o si chiude.

Creazione di uno Script semplice
Per dar origine ad un nuovo script è necessario
- rezzare un prim
- click sul prim per entrare in modalità Edit/Build
- aprire le impostazioni avanzate nel pannello di Edit con il bottone MORE
- selezionare la Tab 'Content'
- cliccare sul pulsante 'New Script'

Per visualizzare il nuovo Script (quello di default che apparirà in una nuova finestra) cliccare nella nuova voce di nome 'New Script' che appare nella lista della Tab 'Content'.


default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
}

touch_start(integer total_number)
{
llSay(0, "Touched.");
}
}


Lo script che si crea in automatico quando si preme sul pulsante 'New Script' fornisce un comportamento al nostro prim. Nella fattispecie, gli fa dire (in chat) "Hello Avatar" nel momento stesso in cui si crea (e non appena quindi entra conseguentemente in funzione), gli fa dire (in chat) "Touched" quando si tocca il prim che lo possiede (lo script).

Tale script definisce un solo stato (Default) per il prim e quindi reagirà sempre allo stesso modo a degli Eventi che nella fattispecie sono 2 (colorati in blu nella finestrella dello script):

- 'state_entry': l'evento che accade quando lo script inizia ad esistere
- 'touch_start': l'evento che si verifica quando qualcuno Tocca l'oggetto

E' possibile far riverificare l'evento 'state_entry', facendo attivare nuovamente lo script (e quindi facendo riaccadere l'Evento), premendo il bottone 'Reset' in basso.

All'interno dello stato 'Default' ai 2 Eventi previsti, il prim reagisce dicendo qualcosa in chat. L'LSL reagisce agli Eventi tramite le cosiddette Funzioni. La funzione 'llSay' (colorata in rosso nella finestrella dello script) che si occupa di far dire qualcosa in chat al prim è di tipo parametrica, ossia si aspetta delle indicazioni attraverso questi due parametri:

- Message [Parametro Stringa] : 'su cosa deve dire', ossia il messaggio da far dire in chat (colorato di verde e tra virgolette nella finestrella dello script. Il valore stringa/testuale è sempre riportato tra virgolette)
- Channel [Parametro Numerico] : identifica il 'canale che usiamo per far parlare l'oggetto' come appunto la chat.

Canali
Come la radio, la chat che è il canale che gli oggetti usano per darsi istruzioni, dispone di diverse frequenze.
Il canale "0" è visibile a tutti, gli altri canali invece 1, 2, 3, 4 etc sono invisibili, come quello che viene impiegato per far dialogare il bottone avanti e il tabellone dello Slide Viewer per far scorrere le diverse Slide. Ad ogni pressione del bottone, l'oggetto bottone 'comunica' all'oggetto schermo di cambiare l'immagine rappresentata nel tabellone e l'oggetto schermo, che è in ascolto, obbedisce. Tutto questo avviene in chat ma non è possibile vederlo perchè il bottone e lo schermo stanno usando un canale diverso da '0'.


Modifica dello Script

Aggiungere sotto a

llSay(0, "Touched.");


state second;


e sotto la chiusura dello Stato 'Default' questa parte di codice



state second
{
touch_start(integer total_number)
{
llSay(0, "riTouched.");
}
}



Lo 'state second' viene inserito anche prima della chusura dello Stato 'Default' per richiamare e indicare che dopo 'Default' esiste 'state second'


Immagine



Codice completo


default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
}

touch_start(integer total_number)
{
llSay(0, "Touched.");
state second;
}
}

state second
{
touch_start(integer total_number)
{
llSay(0, "riTouched.");
}
}



Con questo nuovo script, il prim ora può avere 2 stati.

- 'Default' (produce in chat "Touched")
- 'Second' (produce in chat "riTouched")


* Come reagisce il Prim toccato due volte
Immagine

Gli stati vengono definiti (come le funzioni) dagli stessi scripter. Ad esempio per una porta è possibile definire lo stato 'Aperto' o 'Chiuso', cosi' come 'Locked' o 'Unlocked'.
Lo stato "default" può non essere sempre presente ma è buona norma definire sempre almeno uno stato e quindi, allo scantenarsi dell'evento (il tocco), il prim dirà (come definito solo dal secondo stato) "riTouched" e non più "Touched" (del primo stato di Default).

Come funziona lo script: inizialmente il prim è in stato 'default', ma se qualcuno lo tocca, questo, oltre a dire 'Touched', cambia di stato ed entra in stato 'second'. Da quel momento in poi il prim è, e rimarrà in stato 'second'.
All'interno del'evento 'touch_start' adesso c'è una nuova riga: 'state second' che si occupa di far cambiargli stato. Da quel momento in poi il prim non farà più quanto definito entro lo stato 'default' ma farà invece quanto indicato entro lo stato 'second'. E quindi, quando qualcuno toccherà di nuovo il prim questo dirà "riTouched" come indicato nello stato second.
E' come una porta all'inizio si trova in stato Open (Aperta) e che, quando qualcuno la tocca, oltre che chiudersi, passa in stato Closed (Chiusa). Quando qualcuno la ritocca, non sarà più in stato 'Open', ma 'Closed'. Nello stato 'Closed', quando qualcuno tocca la porta, questa si Apre e, oltretutto, ricambia nuovamente stato per tornare in stato 'Open'. E così via con lo stesso ciclo fino a quando si toccherà.

Risorse
L'LSL ha una libreria di circa 300 funzioni e sono consultabili nel menu a tendina in basso a sinistra nella finestra di script. Le Reference (in inglese) si trovano da Menu > Help > Scripting Guide.

Il video mostra tutti i passaggi

Immagine
Ultima modifica di Francesco Guidolanda Arai il sab nov 10, 2007 6:38 pm, modificato 1 volta in totale.
  • L'Olanda, il Diario Guida Viaggi
  • BlogOlanda, Il Blog dell'Olanda
Avatar utente
Francesco Guidolanda Arai
 
Messaggi: 1411
Iscritto il: mer ago 29, 2007 11:57 am
  • Sito web
Top

Messaggiodi Francesco Guidolanda Arai » sab nov 10, 2007 5:39 pm

* Tips & Tricks - Come realizzare una porta che si apre al tocco

In Tips & Tricks e, a differenza dei corsi di base, vengono trattati una serie di temi architettonici a rotazione.
Si consiglia di aver frequentato le lezioni “Costruzione Iâ€, “Costruzione II†e “Scripting†prima di avvicinarsi a questi corsi, che daranno per scontati una serie di conoscenze di base.

Per realizzare una porta sono necessari due elementi che dovranno essere rezzati prima di procedere con lo Script e linkati tra loro

1) la porta (un porta in SL di solito è più alta della RL perchè ci sono avatar alti 2 metri e mezzo o più) che dovrà essere dritta e quindi perpendicolare al terreno, altrimenti ruoterà male
2) una cerniera (il prim più piccolo) che come nella RL sarà il fulcro sul quale la porta gira, ovvero il centro di rotazione.

Quando si linkano due prim, l'ultimo selezionato (quello che rimane con la selezione gialla) è sempre quello che comanda.

Immagine

Per realizzare quindi lo Script di quello che verrà applicato al centro di rotazione che si trascinerà la porta nella rotazione si procede come segue:

- click sull'oggetto (i 2 prim collegato) per entrare in modalità Edit/Build
- aprire le impostazioni avanzate nel pannello di Edit con il bottone 'More'
- selezionare la Tab 'Content'
- cliccare sul pulsante 'New Script'
- doppio click sul file e aprire lo script

Nella finestra che appare, caricare il seguente script
Codice: Seleziona tutto
default
{
    state_entry()
    {
        llSay(0, "la mia porta");
       
    }

    touch_start(integer total_number)
    {
        llSay(0, "Touched.");
        rotation rot = llGetRot();
        rotation delta = llEuler2Rot (<0,0,90 * DEG_TO_RAD>);
        rot = delta * rot;
        llSetRot(rot);

   }
}

Nello Stato "default" è presente un Evento "touch start" che si attiva al click. Al tocco della porta, viene prodotto prima (tramite la Funzione 'llSay') in chat (al canale '0') la parola 'Touched'. Verrà poi utilizzato l'evento "touch start", proprio perchè la porta si dovrà aprire al click (Reazione all'evento).

Esaminando il codice all'interno dell'evento "touch start":

- llGetRot(); è una funzione predefinita, significa "prendi la mia rotazione attuale"
- rotation rot è una variabile di rotazione in cui vengono collocate le informazioni che servono
- llEuler2Rot è la funzione che fa svolgere la rotazione
- (<0,0,90 * DEG_TO_RAD>); qui vengono indicati i gradi di rotazione e l'asse.
- DEG_TO_RAD trasforma il raggio in radiante
La funzione originaria è
(<x,y,z * DEG_TO_RAD>); (si attribuiscono agli assi 'x=<0','y=0' e 'z=90' i valori indicati) che istruita diviene (<0,0,90 * DEG_TO_RAD>);

Ossia, viene prelevato il valore della rotazione (90 gradi sull'asse z) e viene collocata in una variabile 'rot' che dipendenderà da un'altra variabile 'delta' che a sua volta è un parametro che dipenderà da quanto è impostato con 'llEuler2Rot'. Ovvero la nuova rotazione sarà ogni volta il risultato di quella di default per quella stabilita dalla rotazione di 90 gradi sull'asse 'z'.

- llSetRot(rot); è la funzione che imposterà questa nuova rotazione, ossia 'rot'

Per come è adesso costituito lo script, la porta gira in un solo senso. Per farla girare nel senso contrario è necessario creare un nuovo stato ('state close')


Modifica dello Script

Aggiungere sotto a
Codice: Seleziona tutto
llSetRot(rot);

Codice: Seleziona tutto
state close;


e sotto la chiusura dello Stato 'Default' questa parte di codice

Codice: Seleziona tutto
state close
{
   touch_start(integer total_number)
  {
      llSay( 0, "la porta si chiude!" );
      rotation rot = llGetRot();
      rotation delta = llEuler2Rot (<0,0,-90 * DEG_TO_RAD>);
      rot = delta * rot;
      llSetRot(rot);
      state default;
  }
}


Immagine

Ossia, viene creato un nuovo stato ('state close') alla fine dello stato 'default' e sotto viene inserito lo stesso script ma con una differenza: la rotazione, sempre sull'asse 'z', questa volta è -90 gradi

Alla fine dello stato close, si avranno quindi dei richiami per creare il ciclo. Al primo click la rotazione sarà di 90 gradi mentre al secondo di -90 gradi.

Codice completo

Codice: Seleziona tutto

default
{
    state_entry()
    {
        llSay(0, "la mia porta");
       
    }

    touch_start(integer total_number)
    {
        llSay(0, "Touched.");
        rotation rot = llGetRot();
        rotation delta = llEuler2Rot (<0,0,90 * DEG_TO_RAD>);
        rot = delta * rot;
        llSetRot(rot);
        state close;
    }
}
state close
{
   touch_start(integer total_number)
  {
      llSay( 0, "la porta si chiude!" );
      rotation rot = llGetRot();
      rotation delta = llEuler2Rot (<0,0,-90 * DEG_TO_RAD>);
      rot = delta * rot;
      llSetRot(rot);
      state default;
  }
}


Il video mostra come la porta si chiude e si richiude ogni volta che viene toccata

Immagine
  • L'Olanda, il Diario Guida Viaggi
  • BlogOlanda, Il Blog dell'Olanda
Avatar utente
Francesco Guidolanda Arai
 
Messaggi: 1411
Iscritto il: mer ago 29, 2007 11:57 am
  • Sito web
Top


Rispondi al messaggio
3 messaggi • Pagina 1 di 1

Torna a Scripting LSL

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

  • Indice
  • Staff • Cancella cookie • Tutti gli orari sono UTC +1 ora [ ora legale ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzione Italiana phpBB.it
Second Life(R) and Linden Lab(TM) are trademarks or registered trademarks of Linden Research, Inc. No infringement is intended.
© 2005-2010 Raneri Web Design - All right reserved - Powered by Amici.CC Chat gratis & Warp.it
International: SLinside (Germany) | Second Life Spain | Second Life Russia