[aide] Connaitre la position d'un "clic"

Répondre
Partager Rechercher
Bonjour. Il faut imaginer un panneau, quelqu'un clique dessus. Le but serait de connaître les positions (X et Z) ou (Y et Z) de l'endroit où il a cliqué ?

Si ce n'est pas possible, j'avais pensé à un objet (genre flechette) dont on se servirait des coordonnées. Dans ce cas-là, est il possible de poser l'objet sur le panneau juste en cliquant sur le panneau ? (= sans passer par "modifier")

Enfin, si ce n'est toujours pas possible, j'avais pensé à diviser mon panneau en une multitude de cubes. Ainsi, il suffirait d'avoir les coordonées du cube sur lequel la personne cliquerait. J'ai peur que cette solution soit la seule possible mais ça prendrait vraiment beaucoup beaucoup trop de prims vu mon idée.

Merci d'avance.
Je ne pourrais pas t'éclairer totalement, mais de mémoire on peut savoir ou le click a eu lieu sur une prim... si c'est bien le cas les pro sauront t'orienter plus précisément sur la fonction a utiliser.
Bon courage pour la suite
C'est un genre de script comme ça qu'il te faut?
On le trouve sur le lslwiki

Code:
default
{
    touch_start(integer total_number)
    {
        vector UV = llDetectedTouchUV(0);
        float U = UV.x;
        float V = UV.y;
        llSay(0, "x=" + (string)U + " y=" + (string)V);
    }
}
Tu n'as pas précisé qui doit recevoir l'information. Si c'est seulement le proprio du panneau, faut remplacer la ligne avec llSay par:
Code:
llInstantMessage(llGetOwner(), llDetectedName(0) + " a cliqué sur " + "x=" + (string)U + " y=" + (string)V);
mais bonjour le spam dans la fenêtre chat du proprio.


Suis grillée par un chaton !
__________________

Dernière modification par L'âme immortelle ; 08/11/2011 à 01h25.
J'ai essayé la solution de L'âme immortelle, ainsi que le premier script proposé sur la page de blackcats mais je n'ai aucun résultat. Rien ne s'affiche dans le tchat ou sur l'objet. C'est là que je me dis que je suis vraiment un sous-doué dans le script je crois .

En fait, comme beaucoup de gens je crois, j'ai des idées mais je suis trop mauvais pour les réaliser.

Vous connaissez sans soute le jeu où on donne une capitale et il faut cliquer sur l'ecran pour la placer le + précisement possible.

J'avais pensé à ce jeu dans SL. Un panneau avec une carte du monde. 50 capitales, dont les coordonnées vis-à-vis du panneau sont déjà enregistrées dans le jeu. 10 capitales à placer avec un tps limité à chaque fois. Le nom d'une capitale s'affiche: le jeu, lui, connait la position exacte; le joueur tente de la placer en quelques secondes. Puis pour le score, calcul de la différence de position entre le placement du joueur et celui déjà enregistré. Pour passer à la capitale suivante, le joueur appuie sur un bouton. Puis somme des 10 différences = score. Ainsi, plus le score final est faible, meilleur est le classement.

Pour calculer la distance, j'avais pensé à: √( ( Xb-Xa)²+(Zb-Za)² ). Est ce qu'il est possible de mettre des formules mathématiques dans des scripts ?

Est ce que vous pensez que ce projet est possible?
Est ce que vous le pensez à la portée d'un noob en script mais qui, si ça peut être à sa hauteur, essaierait d'apprendre le LSL ?

Si vous pensez que c'est super compliqué, à la limite de l'impossible, quelque chose où même Walker Texas Ranger aurait du mal, bah si y a des intéressés, servez vous
Oui ce que tu veux faire et parfaitement réalisable. Et heureusement on peut faire des calculs mathématiques dans les scripts.

Le script que t'as donné Âme Immortelle fonctionne. Est tu sur d'avoir cliqué sur la bonne face ? (la face 0).
Je te donne un exemple pour t'aider :

Code PHP:

// Paramètres de positions à trouver
list LISTE_POS = [
    
"Paris",<.5,.5,.0>,
    
"Marseille",<.2,.1,.0>
        ];

// Textes
string MESS1 "Il vous faut trouver la ville de ";
string MESS2 "Bienvenu sur ce jeu... blablabla";
string MESS3 "Fin du jeu. Votre écart total est de ";
string MESS4 "Vous avez fait un écart de ";
string MESS5 "Désolé mais le jeu est déjà en cours d'utilisation";

// Reset si pas de clic au bout de ce temps là (en secondes)
float TIME 60.0;

// Variables
key k_ava NULL_KEY;
integer i_etape;
float f_result;

// Message pour ville
ville() {
    
llInstantMessage(k_avaMESS1 llList2String(LISTE_POSi_etape 2));
}

// Etat par défaut
default
{
    
touch_start(integer total_number)
    {
        if(
k_ava == NULL_KEY) {
            
k_ava llDetectedKey(0);
            
llInstantMessage(k_avaMESS2);
            
ville();
            
llSetTimerEvent(TIME);
            
i_etape 0;
            
f_result .0;
        }
        else {
            
// Test avatar qui clique
            
if(llDetectedKey(0) == k_ava) {
                
// Réactivation du timer
                
llSetTimerEvent(TIME);
                
// Evaluation du clic
                
float f_ecart llVecDist(llDetectedTouchUV(0), llList2Vector(LISTE_POS, (i_etape 2) + 1));
                
llInstantMessage(k_avaMESS4 + (string)f_ecart);
                
f_result += f_ecart;
                
// Fin du jeu ?
                
if(++i_etape == llGetListLength(LISTE_POS) / 2.0) {
                    
llInstantMessage(k_avaMESS3 + (string)f_result);
                    
k_ava NULL_KEY;
                    
llSetTimerEvent(.0);
                }
                
// Nouvelle ville
                
else ville();
            }
            
// Un autre avatar que celui qui joue
            
else llInstantMessage(llDetectedKey(0), MESS5);
        }
    }
    
timer()
    {
        
k_ava NULL_KEY;
        
llSetTimerEvent(.0);
    }

A toi de le modifier, l'enrichir. Il serait par exemple intéressant de donner la possibilité à plusieurs avatars de jouer en même temps .

Dernière modification par bestmomo ; 08/11/2011 à 13h10. Motif: Correction du code
Merci beaucoup pour le script. J'aime bien l'idée de plusieurs joueurs. Je vais me remettre au script avec l'aide de ton manuel pdf et je vous tiens au courant de l'avancée du projet.

Dernière modification par gonald69 ; 09/11/2011 à 16h06. Motif: orthographe
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés