Introduzione
Costruire una cassa esplosiva può sembrare complesso, invece è molto semplice e sicuramente divertente.
Ho utilizzato io stesso (soprattutto in DRONE WAR) molti oggetti che esplodono o reagiscono alle collisioni (dei laser nel mio caso).
Lo stesso metodo potrete applicarlo per qualunque altra cosa: un vetro, una bomba, una pizza..
Costruzione
costruite un semplice cubo e applicate una texture qualunque, nel mio caso ho fatto velocemente cosi:

Creiamo lo script
Adesso la parte piu importante è sicuramente il codice da creare.
L'unica cosa che dobbiamo fare, è creare un semplice script, che conta le "energie" e le diminuisce non
appena l'oggetto viene toccato da qualcosa.
Clicchiamo su contenuto > nuovo script, e proviamo a scrivere questo, in maniera molto grezza ma che vi farà comprendere la parte principale:
////-----------inizio script-------------
integer energie = 10;
default
{
state_entry()
{
llSay(0, "Energie: "+(string)energie);
}
collision_start(integer total_number)
{
energie--;
llSay(0, "Energie: "+(string)energie);
}
}
/////------------fine script------------
Questo script è molto chiaro: diamo un valore iniziale di 10, e ogni qualvolta la cassa viene toccata (da noi o da un oggetto fisico) le energie si decrementano di uno.
Per comodità ho inserito un llSay che ci aggiorna sulle energie totali rimanenti.
Quello che adesso noi vogliamo è principalmente una cosa:
- se le energie arrivano a 0, la cassa muore ( o la rendiamo temporaneamente invisibile e phantom)
Per fare "morire" l'oggetto, servirà solo creare una condizione usando if.
La condizione è molto semplice, e verrà inserita nell'evento collision_start, sotto la riga " energie--; "
if (energie == 0)
{
/// azioni da svolgere
}
Le azioni da svolgere possono essere le piu svariate: particles, rumori, scritte e altro.
La cosa piu ovvia è chiaramente rendere la cassa invisibile o addirittura farla morire ( usando llDie( ), che vi fa morire l'oggetto, quindi attenti ad averne sempre una copia)
Basterà dunque renderla invisibile e phantom scrivendo:
if (energie == 0)
{
llSetAlpha(0, ALL_SIDES);
llSetStatus(STATUS_PHANTOM, TRUE);
}
Possiamo anche stabilire il tempo di "inattività della cassa... per fare questo occorre un timer, da azionare quando la cassa appunto muore.
Non appena il tempo di inattività finisce(ad esempio 60 secondi), resettiamo lo script per ottenere i valori iniziali (quindi energie al max, visibilità e stato non phantom).
La condizione quindi IF, sarà:
if (energie == 0)
{
llSetAlpha(0, ALL_SIDES);
llSetStatus(STATUS_PHANTOM, TRUE);
llSetTimerEvent(60);
}
Lo script totale della cassa sarà il seguente:
/////-----------inizio script-------------
integer energie = 10;
default
{
state_entry()
{
llSetAlpha(1, ALL_SIDES);
llSetStatus(STATUS_PHANTOM, FALSE);
}
collision_start(integer total_number)
{
energie--;
if (energie == 0)
{
llSetAlpha(0, ALL_SIDES);
llSetStatus(STATUS_PHANTOM, TRUE);
llSetTimerEvent(60);
}
}
timer()
{
llResetScript();
}
}
/////------------fine script--------------
Adesso potete provare!!!
Sbatteteci per 10 volte (o sparategli qualunque cosa) e vedrete la cassa sparire per 60 secondi... e tornare attiva!
Adesso sta a voi usare la fantasia e rendere questo effetto piu spettacolare, provando un suono o delle particles.
|
Non scrivevo da qualche settimana, ma sono stato impegnato tra le altre cose, in un progetto che (finalmente) ho concluso.. DRONE WAR. DRONE WAR è un piccolo FPS(First Person Shooter) che ho creato in Second Life. Ecco come si gioca: una volta arrivati (inserirò l'url e il video alla fine dell'articolo), potrete subito cliccare l'armadietto per ottenere il fucile e l'armour. Indossati, potrete cominciare la vostra avventura nei laboratori sotterranei, tra droni, torrette,laser e altri oggetti vari con cui potrete interagire. Scopo del gioco è disattivare una bomba nucleare (dovrete distruggerla a colpi di laser) entro 15 minuti, e chiaramente senza farsi ammazzare. In quest'ultimo caso dovrete aspettare 4 ore per tornare operativi e poter vincere il premio (che è in linden). Troverete le istruzioni all'interno della stanza iniziale, e qualche istruzione durante il gioco. Il gioco è in continua evoluzione,in quanto sono sempre aggiornati e inseriti nuovi elementi(piccoli enigmi da risolvere, oggetti con cui interagire e piccole trappole) e ha ottenuto ottimi apprezzamenti da diversi utenti. SL per natura si presta poco a questo genere di cose, ma ho lavorato tanto per ottimizzare le risorse, ed evitare lag, rendendo il tutto il più dinamico possibile. Inoltre i costi delle sim restano davvero elevati e nonostante il gioco sia totalmente gratuito, una donazione anche minima è sempre gradita!:)) Ecco il trailer
Per raggiungere lo scenario di gioco basta andare a : http://slurl.com/secondlife/Armaud/179/85/1513 e cliccare il tabellone per teleportarvi alla stanza iniziale. Buon combattimento! Sergio Grazie ad un paio di video (tra l'altro molto belli), sono venuto a conoscenza di una nuova funzione di LSL script. In particolare, la funzione in questione permette di settare una lista di coordinate, in modo da far muovere l'oggetto secondo varie "tappe" in un tempo prestabilito, con l'opportunità di impostare modalità ciclica o altro ancora (i dettagli li trovate qui : http://wiki.secondlife.com/wiki/LlSetKeyframedMotion) Buona visione! Gli script di esempio li trovate qui: --------------------------------------- --------------------------------------
Ed ecco il video di pallina60 Loon.. da vedere assolutamente!
Dopo alcuni mesi di pausa, il blog è tornato on line (ed anche il sottoscritto). Presto nuove novità. Grazie a tutte le persone che mi hanno sostenuto, e a chi ha insistito affinchè il sito tornasse online. Se a qualcuno venisse la brillante idea di collaborare(con tutorial, info o quant'altro), può mandarmi una e-mail, o contattarmi direttamente su Second Life Sergio Ecco un metodo semplice per risparmiare CPU(e quindi garantire una maggiore velocità alle altre applicazioni in esecuzione) quando avete il viewer in background. Selezionate Advanced ( se usate Phoenix, si attiva premendo ctrl+alt+D, se usate il Viewer 2, attivatelo su World > Show > Advanced menu) Sul menu Advanced andate alla voce > Show Debug Settings qui dentro cercate la voce "BackgroundYieldTime" (il valore di default è 40 ms). Per avere un viewer piu "leggero"in background, aumentate il valore (esempio 300). Se provate a cliccare in una qualunque parte sul desktop(mettendo quindi il vostro viewer in background) vedrete come il refresh di ogni immagine verrà fatto in maniera piu lenta. In base alle vostre esigenze(navigazione in internet, grafica e altro ancora) potrete quindi risparmiare parecchia memoria da dedicare non piu al viewer in background, ma alle altre applicazioni usate in quel momento. Ricordo che potete monitorare l'uso della CPU con il TaskManager di Windows(o in alternativa con Activity Monitor per il Mac). |


