mercredi 12 décembre 2007

llListen

La fonction du jour "ecoute" un channel particulier le texte ecrit soit par un avatar , soit par un objet via la fonction llSay. Cette fonction est très utilisé pour déclencher des comportements par voix. Par exemple les pose ball se cache et s'affiche par
/1 hide ou /1 show

la fonction paramètre un ensemble de critère qui déclenche l'evenement Listen.
Mais llListen ne le déclenche que sous les conditions de ses paramètres.

Notion déjà vu pour llSay, ici on ecoute un canal particulier
Integer channel

ne déclenchera l'evenement que si dans le message il y a ce string, on met "" si l'on ne veux pas de filtre
string filtre

On peut preciser d'ecouter qu'une seul personne, mais ce n'est pas obligatoire, le cas échéant on mets NULL_KEY
key QuiParle

Ce filtre est encore plus restrictif, l'evenment ne ce déclanchera que si ce texte est dit.
string message

passons maintenant à une partie tout aussi importante l'evenement listen
Nous avons comme paramètre le channel ecouté, car on peut ecouter plusieurs channels à la fois.
Nous avons une key qui l'identifiant de qui ou quoi a déclenché l'evenement. Et pour finir, bien évidement le message

Il ne reste plus qu'a tester les différents parmètre pour faire notre action.
Nous Serions en droit de penser que nous pourrions ecrire ceci à chaque fois et de tester dans le listen
llListen(0,"",NULL_KEY,"");

Le problème ici, c'est le lag(ralentissement général), car l'événement est appellé très souvent. Il vaut mieux qu'il soit restreint au maximum


// Key est un numéro unique pour définir quelque chose dans second life
// chaque objet, avatar, etc... sont identifiés par une key
key Proprio;

default
{
state_entry()
{
// on affiche un texte en rouge(fonction connue)
llSetText("mon texte est rouge",<1,0,0>,1.0);

// cette fonction retourne la key du propriétaire de l'objet
Proprio=llGetOwner();

// notre fonction du jour
llListen(1,"texte",Proprio,"");
}
listen(integer channel, string name, key id, string message)
{
// ici on test le contenu du message "entendu" et change la couleur du texte
if(message=="texte rouge") llSetText("mon texte est rouge",<1,0,0>,1.0);
if(message=="texte vert") llSetText("mon texte est vert",<0,1,0>,1.0);
if(message=="texte bleu") llSetText("mon texte est bleu",<0,0,1>,1.0);

}
}

Aucun commentaire: