Affichage des articles dont le libellé est float. Afficher tous les articles
Affichage des articles dont le libellé est float. Afficher tous les articles

vendredi 28 décembre 2007

llGetRot

La notion d'aujourd'hui est très compliqué, c'est pourquoi nous ne ferons que la survolée pour le revoir plus en profondeur plus tard.
llGetRot nous donne la rotation d'un objet sous forme d'un vecteur. Vous avez pu le constater que lorsque l'on change la position d'un prim, ca n'a pas le même effet si on a changé la rotation.
En effet le déplacement reste le même mais plus dans le sens de la rotation. Pour ceux qui ont des notions de trigonométrie, cela sera plus facile à comprendre.

tout le secret réside ici:
offset*=llGetRot();

ca pourrait déja s'ecrire offset=offset*llGetRot() mais on utilise généralement se raccourci d'ecriture
En faisant le produit entre la rotation(ou angle) et le vecteur de position on modifie la position en fonction de la rotation.
Intuitivement on peut se douter que la rotation doit rentrer en ligne de compte.
Pour l'instant admettez juste pos*rot prise compte de la rotation.


Notre script de porte a aussi une amélioration notable, on utilise un seul script pour les deux portes, il suffit juste de mettre -1 ou 1 dans la description

// defini un vecteur pour la position de l'objet
vector pos;
integer sens;
default
{
state_entry()
{
// fonction que l'on a déja vu qui recupère la description de l'objet
// la valeur de la description de l'objet sera -1 ou 1
// cette valeur permetra à le porte de s'ouvrir vers la gauche ou la droite
// en fonction de si il s'agit d'une porte de gauche ou de droite
// (integer) permet de transformer en entier le string en provenance de la description
sens=(integer)llGetObjectDesc();
}

touch_start(integer total_number)
{
vector size;
// float est un nombre décimal(a virgule)
float largeur;

// sauvegarde la position initiale
pos=llGetPos();

// recupère les dimension de l'objet
size=llGetScale();
largeur=size.y;

// on appelle un offset la différence de distance entre deux point
// en multipliant par le sens notre porte ira vers la gauche ou la droite
vector offset=<0,sens*largeur,0>;

// la fonction du jour
offset*=llGetRot();

// on ajoute l'offset à la porte pour la déplacer
llSetPos(pos+offset);


// delenchera l'evenement timer dans 20 secondes
llSetTimerEvent(20);
}
timer()
{
//remet en place l'objet
llSetPos(pos);

//empêche le déclenchement de l'evenement timer
llSetTimerEvent(0);
}
}

jeudi 13 décembre 2007

llFrand

La fonction llFrand() permet de tirer un chiffre au hasard. On lui passe un float(nombre décimal) et il en retourne un autre entre 0 et celui passer en paramètre. Cette petite fonction peut ce se révèler utile dans nombre de cas.
Une application de llFrand aujourd'hui, le script choisi un nombre au hasard et vous devez deviner le nombre. pour répondre vous saissez dans la fenêtre de chat qu'il ecoute via un listen eet compare le message par rapport à la valeur tappée

// integer defini un nombre de type entier donc san virgule
// en placant notre déclaration ici, la varaible est utilisable dans tout le script
// sinon elle n'est visible que dans l'envenement

integer nb;

default
{
state_entry()
{
// Ici on écoute tout ce que dit le propriétaire sur le channel public

llListen(PUBLIC_CHANNEL,"",llGetOwner(),"");

// Rapidement on met un libelle pour informer

llSetText("touchez moi",<1,0,0>,1.0);
}

touch_start(integer total_number)
{
// en touchant on a déclencher le jeu, donc il n'attend plus que on le touche
llSetText("",<1,0,0>,1.0);

// la fonction du jour
nb=(integer)llFrand(10.0);

// on informe que le nombre a ete choisi
llSay(PUBLIC_CHANNEL,"j'ai choisi un nombre");
}

listen(integer channel, string name, key id, string message)
{
// ici on rencontre se que l'on appelle un "cast" ou transtypage en francais
// on transforme un type en un autre
// ici message est un string mais nous voulons un integer en le mettant
// entre paranthèse il va essayer de le transformer
// on remarque aussi l'attribution direct pendant la déclaration

integer reponse=(integer)message;

// ici on va tester l'ensenble des possibilités

if(reponse>nb)
{
llSay(PUBLIC_CHANNEL, "non c'est trop grand");
}
else
{
if(reponse
{
llSay(PUBLIC_CHANNEL, "non c'est trop petit");
}
else
{
llSay(PUBLIC_CHANNEL, "bravo vous avez gagner");
}

}

}


}

mardi 11 décembre 2007

llSetText

llSetText permet d'afficher un texte au dessus d'un objet. Cette fonction présente de nombreuses applications. Elle permet surtout d'informer sur le comportement ou le contenu de l'objet. Par exemple il y a les teleports, pose balls, les vendeurs d'article, etc..
L'image vous montre en résultat de "floating text"
Elle est très simple d'utilisation comme le montre le script du jour.

default
{
state_entry()
{
// il est de type sting c'est a dire un texte séparé par des guillemets
// attention l'accentuation n'est pas accèpté en LSL
string message;

// le type float est un réel, un nombre à virgule. Il doit avoir un point
f loat transparence;

// le type vecteur est une combinaison de 3 réel spéaré par des virgules
// et encadré par des <>
vector couleur;

// libelle du message au dessus de l'objet
message="Ce message flotte au dessus de votre objet";

// la transparence du texte, elle varie de 0 transparent à 1.0 opaque
transparence=1.0;

// la couleur est définir par un vecteur
// chaque chiffre représente une composante Rouge Vert ou bleu RVB
// les valeurs varient de 0 à 1. Ici c'set rouge <1,0,1> fera du violet
couleur=<1,0,0>;

//là il s'agit de la fonction à proprement dit
llSetText(message,couleur,transparence);
}

}