User:Michel Lemmon/Script Intermedio
< User:Michel Lemmon
Jump to navigation
Jump to search
Revision as of 21:59, 1 April 2008 by Michel Lemmon (talk | contribs)
Michel Lemmon 20:00, 11 march 2008(PST)
Contents
Script Lezione Script Intermdio Lezione 1Descrizione: Si tratta di una lezione Script Intermedio Pre-Requisiti: Conoscenza script Base e Building Durata Stimata: 90 minuti Nota: Trovate qui di seguito le slide della formazione. Introduzione Corso Script Intermedio 1
ScopoLo scopo di queste lezioni intermedie è di offrirvi le capacità di poter scriptare degli oggetti per cose che vi servono effettivamente, quindi come supporto alle vostre attività di costruzione. ConvenzionePer esigenze di pulizia formale io uso le seguenti convenzioni:
if(x==1) { <a> } else { } Debug
debug(string str) { if(iDEBUG==1) llSay(10,str); } l'uso del canale 10 è legato al fatto che non disturba gli altri in modalità debug. Per "leggere" il debug di un oggetto siffatto basta scriptare quanto segue:
default { state_entry() { llListen(10, "",NULL_KEY,""); } listen(integer channel,string objname,key id,string str) { llOwnerSay("DEBUG obj: "+objname+": "+str); } } ComunicazioneIn comune queste attività hanno il fatto che gli oggetti si parlano "a distanza". Questo vuol dire che 2 o più prim possano scambiarsi informazioni attraverso dei canali di comunicazione. Parlare vuol dire che l'oggetto A vuole mandare un messaggio M all'oggetto B, che lo "sente" e di conseguenza esegue determinate azioni, eventualmente rispondendo all'oggetto A. Vi sono molti modi ma i più semplici sono fondamentalmente 2: parlarsi con i canali Say, oppure parlarsi con i canali linked, se gli oggetti sono linkati assieme. Come si fa a parlarsi con i canali Say:Gli oggetti A e B si devono mettere d'accordo su un canale comune, possibilmente non utilizzato da altri oggetti. Il canale di solito è:
Noi utilizzeremo inizialmente il sistema predefinito nei programmi, vale a dire specificheremo un canale prefissato. Esempio di trasmissione elementareOggetto A (Trasmittente):
if(iDEBUG==1) llSay(10,str); } default { state_entry() { debug("Talking to channel "+(string)iCHANNEL+" click me to make me sending a message"); } touch_start(integer count) { llSay(iCHANNEL,"Here I am"); } }
if(iDEBUG==1) llSay(10,str); } default { state_entry() { llListen(iCHANNEL,"",NULL_KEY,""); debug("Listening to channel "+(string)iCHANNEL); } listen(integer channel,string objname,key id,string str) { if(objname=="A") { llSay(0,"Receiving "+str+" from "+objname); } } } Finestra che cambia la sua trasparenzaOra usiamo questo sistema per fare in modo che l'oggetto B (che rappresenta una finestra possa cambiare la sua trasparenza quando riceve da A un comando opportuno. Usiamo un dialogo per controllare il livello di trasparenza. Oggetto A (trasmittente)
debug(string str) {} default { touch_start(integer count) { if(iLISTEN!=0) llListenRemove(iLISTEN); key avatar=llDetectedKey(0); debug("touched, presenting menu"); llDialog(avatar, "Choose transparency",["0%","50%","100%"],iDIALOG); iLISTEN=llListen(iDIALOG,"",avatar,""); } listen(integer channel,string name,key id,string str) { debug("received the command "+str+" transmitting to the window"); llListenRemove(iLISTEN); iLISTEN=0; llSay(iCHANNEL,str); } } Oggetto B(finestra)
state_entry() { debug("Listening to channel "+(string)iCHANNEL); llListen(iCHANNEL,"",NULL_KEY,""); } listen(integer channel,string name,key id,string str) { debug("Received command: "+str); if(str=="0%") llSetAlpha(1,ALL_SIDES); if(str=="50%") llSetAlpha(0.5,ALL_SIDES); if(str=="100%") llSetAlpha(0,ALL_SIDES); } } A Usando il metodo MessageLinkedOggetto A (trasmittente)
debug(string str) {} default { touch_start(integer count) { if(iLISTEN!=0) llListenRemove(iLISTEN); key avatar=llDetectedKey(0); debug("touched, presenting menu"); llDialog(avatar, "Choose transparency",["0%","50%","100%"],iDIALOG); iLISTEN=llListen(iDIALOG,"",avatar,""); } listen(integer channel,string name,key id,string str) { debug("received the command "+str+" transmitting to the window"); llListenRemove(iLISTEN); iLISTEN=0; llMessageLinked(LINK_SET, iCHANNEL, str, ""); } } B Oggetto B(finestra)
state_entry() { } link_message(integer sender, integer num, string str, key id) { if(num!=iCHANNEL) return; debug("Received command: "+str); if(str=="0%") llSetAlpha(1,ALL_SIDES); if(str=="50%") llSetAlpha(0.5,ALL_SIDES); if(str=="100%") llSetAlpha(0,ALL_SIDES); } } Come si vede i due sistemi sono analoghi e presentano vantaggi e svantaggi:Vantaggi dei canali Say:
Svantaggi dei canali Say:
Vantaggi dei canali MessageLinked:
Svantaggi dei canali MessageLinked
Esercizi da farsi a casa:
|
|
Michel Lemmon 20:00, 11 march 2008(PST)