Script de mouvement de va-et-vient sur un axe

Répondre
Partager Rechercher
Bonjour,
Je suis en train de construire une machine de Watt. Je cherche à animer mes tiges verticales d'un mouvement perpétuel de va-et-vient verticalement. Ces tiges sont sont théoriquement fixées sur une pièce qui oscille autour d'un axe. J'ai réalisé ce mouvement avec un script du genre balançoire (swing), mais je ne sais pas comment faire bouger mes tiges verticales. Je remercie par avance ce ou ceux qui voudront bien m'aider à résoudre ce problème, sachant que je ne connais strictement rien à l'écriture des scripts.
ben sépa gagné ca. Car pour synchroniser tout ca...

car les mouvement de balancier ca saccade toujours
Pis en plus faut que ca soit syncro avec les mouvement transversaux

Je prpose de le faire à la manière déssin animé.
Tu places les objets et tu fais un llGetPos et llGetRot de chaque
et ca pour chaque séquence. Plus tu fais de séquence plus ca sera fluide.

Et ensuite il ne reste que à faire ton script en faisant des llSetpos et llSetRot avec un timer à la vitesse qui conviens
Oui, pas gagné. T'es aux limites de ce qui est faisable avec du script: plein de prims en mouvements différent dans un même objet lié. Chaque prim devra avoir son propre script et ça pose des problèmes évidents de synchro. Je ne vois pas vraiment de solution simple à part un llMessageLink avec timer qui dit à tout le monde de bouger en même temps.

Le script de balançoire, c'est mort.
Apparemment il serait possible de gagner un peu de fluidité en jouant sur la fonction llSetBuoyancy. A vérifier.
Le problème n'est effectivement pas des plus simples. Je propose une solution pas trop complexe avec un axe vertical sans rotation de départ et deux éléments verticaux liés aux extrémité avec donc une rotation positive de 90 degrés sur l'axe X. Pour simplifier encore l'approche j'admet que les éléments verticaux sont liés en leur milieu (pour ne faire apparaître que la moitié il suffit d'appliquer une texture qui va bien ou de triturer le prim pour décaler l'axe sur le bord). Le root doit être l'axe horizontal.

Avec ces contraintes on peut alors écrire un script qui tient un peu la route de ce genre :

Code PHP:

integer pas;
integer dextro;
integer indexAngle;
float angle;
float delai;
pivote(float angle){
rotation rot llEuler2Rot(<angle.0.0>);
llSetRot(rot);
rot llEuler2Rot(<PI_BY_TWO angle 2.0.0.0>);
llSetLinkPrimitiveParams(2, [PRIM_ROTATIONrot]);
llSetLinkPrimitiveParams(3, [PRIM_ROTATIONrot]);
}
default
{
state_entry() {
angle DEG_TO_RAD 5;
delai 1.0;
pas 4;
}
touch_start(integer total_number) {
dextro TRUE;
indexAngle 0;
state bouge;
}
}
state bouge
{
state_entry() {
llSetTimerEvent(delai);
}
touch_start(integer total_number) {
llSetTimerEvent(0.0);
pivote(.0);
state default;
}
timer() {
if (
dextro) {
indexAngle += 1;
if (
indexAngle pas) {
dextro FALSE;
indexAngle pas 1;
}
}
else {
indexAngle -= 1;
if (
indexAngle < -pas) {
dextro TRUE;
indexAngle = -pas 1;
}
}
pivote(angle * (float)indexAngle);
}

J'ai testé dans le jeu, ça secoue pas trop, il faudrait peut être jouer sur le pas et l'angle pour trouver le meilleur ratio.

Je ne pense pas que ce soit la meilleure réponse au problème posé mais elle a le mérite d'être opérationnelle et de résoudre la synchronisation.
Merci de vos réponses. Le script ci-dessus donne un mouvement très intéressant, similaire aux mouvements de deux axes horizontaux animés par une pièce centrale oscillant sur un axe vertical. Je ne sais pas si je suis bien clair ce matin . Je pense que je vais me plonger dans ses paramètres pour en savoir plus.
Citation :
Publié par Elenia Boucher
Ta solution me parait géniale bestmomo mais j'ai pas compris comment organiser ces 3 axes.

Faut dire que je porte des cheveux blonds ces temps ci.
Sans doute que j'ai mal expliqué belle Elenia. Tu as la pièce centrale horizontale qui est le root avec le script et liés aux extrémités de cette pièce les deux pièces verticales, liées en leur centre. Ces deux pièces verticales ont juste subit une rotation positive de 90° sur l'axe X.
super le script. Moi je voudrais faire un mouvement perpétuel de va et vient :

en fait je voudrais faire un pistons, un tube, qui rentre dans un autre tube et en ressort. Le problème c'est que je ne comprends pas comment régler les axes, ni quels paramètres changer . Pouvez vous m'aider ? Merci beaucoup ^^
Citation :
Publié par Goldorak Dagger
super le script. Moi je voudrais faire un mouvement perpétuel de va et vient :

en fait je voudrais faire un pistons, un tube, qui rentre dans un autre tube et en ressort. Le problème c'est que je ne comprends pas comment régler les axes, ni quels paramètres changer . Pouvez vous m'aider ? Merci beaucoup ^^
Si tu peux mettre un petit dessin de ce que tu veux faire on comprendrait mieux
Rougit
hihi
alors, imagine un cylindre dans lequel rentre un autre cylindre comme une pompe a vélo. j'ai fais des bras robotiques et j'aimerais que le premier cylindre fasse un mouvement de va et viens sur le deuxième mais ces deux pièces doivent faire partie de mon bras robotique. Voila. Comme un piston hydraulique. j'ai réussit a trouvé le script mais le problème c'est qu'il n'est pas linkable.

Merci de votre aide
Citation :
Publié par Goldorak Dagger
alors, imagine un cylindre dans lequel rentre un autre cylindre comme une pompe a vélo. j'ai fais des bras robotiques et j'aimerais que le premier cylindre fasse un mouvement de va et viens sur le deuxième mais ces deux pièces doivent faire partie de mon bras robotique. Voila. Comme un piston hydraulique. j'ai réussit a trouvé le script mais le problème c'est qu'il n'est pas linkable.

Merci de votre aide
Si tu as un script de mouvement de va et vient qui fonctionne avec des prims libres tu peux en général le transformer en version linké en remplaçant les llGetlPos par des llGetLocalPos. Tu passes ainsi en coordonnées locales. Mais sans voir ton script je peux pas garantir que ça fonctionne.
ha zut j'ai forgété.
Alors voila le script de base :

// basic piston
// +/- 1 metre in cm steps
// assumes z axis only
//
// change for steps for shorter transition
// change llSetPos increment to make bigger steps
// can add touch on/off as required
// open source - have fun ! sirhcdesantis

// vars

vector where_we_are;
integer t;
integer running; // otherwise we run once

default
{
state_entry()
{
running = 1; // this forces it to run all the time
// loop starts here
while( running == 1 )
{
// lets go up
for( t = 0 ; t < .1 ; t ++ ) // 100 step counter
{
where_we_are = llGetPos(); // where we are (we might have moved)
llSetPos( <where_we_are.x, where_we_are.y, where_we_are.z + .5> ); // adds 1 cm to our z axis location
}
// and lets go down
for( t = 0 ; t < .1 ; t ++ )
{
where_we_are = llGetPos();
llSetPos( <where_we_are.x, where_we_are.y, where_we_are.z - .5> );
}
}
}
}


Et voila ce que m'a fait un ami. Le probleme c'est que le prim suis bien le mouvement du bras en va et viens, mais il ne marche que quand on a ouvert le script pour le modifier. quand on le referme le prim ne bouge plus. tres étrange. Et je ne sais si on peut lier ce prim a un autre fixe. Voila le script que m'a fait mon ami PaPajah Decuir.


//script qui fait bouger un attachement sur l'axe Y


vector local_position;
integer i=1;
float amplitude=0.2;



default
{
state_entry()
{
//boucle infinie
do
{ //monte de amplitude
local_position = llGetLocalPos();//prend la position en cours
llSetPos( <local_position.x,local_position.y+ amplitude,local_position.z>); //bouge de amplitude sur axe Y
llSleep(1); //attends 1 sec

//descends de amplitude
local_position = llGetLocalPos();//prend la position en cours
llSetPos( <local_position.x,local_position.y- amplitude,local_position.z>);//bouge de amplitude sur axe Y
llSleep(1); //attends 1 sec

}
while(i==1);
}

}

Voila ! Merci encore pour ta réponse aussi rapide. c'est vraiment gentil.
Je viens de tester les 2; ça marche impeccable.

Le second a en effet l'avantage de fonctionner dans un prim enfant qui se déplace alors par rapport au root. Mais pas dans la prim root (c'est alors tout le link qui se déplace).

Merci hop dans ma biblio, et je vous dit pas ce que je vais en faire.
Citation :
Publié par Elenia Boucher

Merci hop dans ma biblio, et je vous dit pas ce que je vais en faire.
Hummmm un script de va et vient, pas difficile à deviner !
Répondre

Connectés sur ce fil

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