Pourquoi ma porte ne tourne pas ?

Répondre
Partager Rechercher
Coucou voila je reviens avec ma porte donc cette fois voila la chose.

J'essaye de contruire une porte.
J'aimerais qu'elle pivote à 90°

j'ai donc mis se code

Citation :
default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
}

touch_start(integer total_number)
{
llSay(0, "Touched.");
llGetRot(<90, 0,0>* RAD_TO_DEG );
}
}
Il y a donc le code de base, j'ai rajouté la dernière action , normalement si je touche la porte devrait s'ouvrir à 90° , pourquoi cela ne fonctionne t'il pas ?

vraiment desolé de déranger pour ça mais j'essaye et je réussie pas
PArce que là, tu as utilisé llGetRot qui est une fonction pour mémoriser l'orientation actuelle de la prim. C'est llSetRot qu'il faut utiliser pour changer l'orientation.

Un script de porte est un poil plus compliqué que ça, parce qu'il faut mémoriser les 2 rotations/positions ouverts et fermés, puis les reproduire. Ensuite, la rotation se fait toujours par l'axe central de la prim.

Tu trouveras le script qu'il faut dans des portes freebies ou sur le web.
Salut, moi j'utilise ça:

Code:
float	   TIMER_CLOSE = 0.0;	  // automatically close the door after this many seconds,
									// set to 0 to disable
integer	 DIRECTION   = -1;	   // direction door opens in. Either 1 (outwards) or -1 (inwards);
integer	 DOOR_OPEN   = 1;
integer	 DOOR_CLOSE  = 2;
vector	  mypos;	  // door position (objects move a tiny amount
						// away from their position each time they are rotated,
						// thus we need to workaround this by resetting
						// the position after rotating)
						
door(integer what) {
	rotation	rot;
	rotation	delta;
	
	llSetTimerEvent(0); // kill any running timers
	
	if (what == DOOR_OPEN) {
		rot = llGetRot();
		delta = llEuler2Rot(<0, 0, -DIRECTION * PI/1.01>);
		rot = delta * rot;				
		llSetRot(rot);
		
	} else if (what == DOOR_CLOSE) {
		rot = llGetRot();
		delta = llEuler2Rot(<0, 0, DIRECTION * PI/1.01>);	
		rot = delta * rot;
		llSetRot(rot);
	}
}
		

default {   // is closed
	on_rez(integer start_param) { // reset, so we store the new position
		llResetScript();
	}
	
	state_entry() {
		mypos = llGetPos();	 // remember where we're supposed to be
	}
	
	touch_start(integer total_number) {
		mypos = llGetPos();
		door(DOOR_OPEN);
		state is_open;
	}
	
	moving_end() {  // done moving me around, store new position
		mypos = llGetPos();
	}
}

state is_open {
	state_entry() {
		llSetTimerEvent(TIMER_CLOSE);
	}
	
	touch_start(integer num) {
		door(DOOR_CLOSE);
		llSetPos(mypos);		// workaround for tiny movements during rotation
		state default;
	}
	
	timer() { // it's time to close the door
		door(DOOR_CLOSE);
		llSetPos(mypos);		// workaround for tiny movements during rotation
		state default;
	}
	
	moving_start() { // close door when door is being moved
		door(DOOR_CLOSE);
		state default;
	}
}
Répondre

Connectés sur ce fil

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