GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Bl4st3r67 le 20 Octobre 2010, 12:31:51

Titre: Faire avancer un objet en ligne droite ?
Posté par: Bl4st3r67 le 20 Octobre 2010, 12:31:51
Bonjour, j'aimerais savoir comment faire pour faire avancer en ligne droite ? (J'ai déja essayé de faire GetObjectPos(ObjectId,Pos[1][ObjectID],etc) puis MoveObject(ObjectId,Pos[1][ObjectID]+5,ect) Mais ça me fais juste avancer sur les Axes Y et X.. Pas en ligne droite (En face de l'objet).
Je sais qu'il faut faire un truc avec FloatCos et FloatSin je crois mais je vois pas comment sa marche..
Et sinon si il y avait un moyen de le faire a partir de l'angle de l'objet ?..

En gros j'aimerais faire avancer une épave de voiture quand je suis dessus en appuyant sur "O" par exemple.

Donc si vous pouviez m'aider :) Merci.

+-
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: chneuls le 20 Octobre 2010, 12:49:34
Salut :D

Il y a cette fonction, qui pourrais te servir, tu prend sois la position de l'objet, X et Y, et l'angle A de l'objet. Ou bien celle du joueur ça dépend ou tu veux faire ^_^

GetXYFront(x, y, a, distance);

Pour le Z utilise sois MapAndreas soit tu essaie de trouver la formule pour la calculer avec le Z en plus :D

A+, Sam.
 :cheers

Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: Ssk le 20 Octobre 2010, 12:57:57
Ouais, tu lui donne juste un nom de fonction.

Tien voila la fonction que je t'ai codé, je ne sais pas si elle est fonctionnel


GetXYFrontOfAngle( &x, &y, angle, distance )
{
x += distance * floatsin( -angle, degrees );
y += distance * floatcos( -angle, degrees );
}
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: Bl4st3r67 le 20 Octobre 2010, 14:12:39
Merci mais je ne vois pas où je dois mettre GetXYFrontOfAngle et comment faire pour que ça fonctionne avec le MoveObject :/ ^^'.

Si vous pourriez m'expliquer  :-[ Merci ^^.

++
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: chneuls le 20 Octobre 2010, 21:07:09
Ben la fonction tu la place ou tu veux dans le script ^^
puis ensuite tu prend la position du joueur par exemple

new Float:X, Float:Y, Float:Z, Float:A;
GetPlayerPos(playerid,X, Y, Z);
GetPlayerFacingAngle(playerid, a);

GetXYFrontOfAngle( X, Y, A,  20.0 ); // 20.0 pour aller chercher à une certaine distance et pas si la vitesse est faible, se retrouver avec un objet qui s'arrete et redemarre ^^ Mais ça a la limite tu le règle comme tu veux ;)
MoveObject(objectid, X, Y, Z, vitesse); // met ce que tu veux ;) ( j'ai un doute sur les paramétres j'fais de têtes ^^

Sam.
 :cheers
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: Ssk le 20 Octobre 2010, 22:16:26
new Float:x = 0.0, Float:y = 0.0, Float:z = 0.0;
new Float:ax = 0.0, Float:ay = 0.0, Float:az = 0.0;
GetObjectPos( objectid, x, y, z );
GetObjectRot( objectid, ax, ay, az );

GetXYFrontOfAngle( x, y, az, 20 );

MoveObject( objectid, x, y, z, 10 );
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: chneuls le 21 Octobre 2010, 10:16:23
Bien vu, Sasuke :D
Par contre pour la vitesse de mouvement à 10 c'est énorme x'P
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: Ssk le 21 Octobre 2010, 10:31:58
Ouais, c'était juste un exemple ^^


Sinon il pourrai y avoir un problème avec l'angle, tu aurai juste à ajuster la variable az en ajoutant ou retirant 90 degrés ( ou plus )
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: Syg le 21 Octobre 2010, 14:04:25
La vitesse passée en paramètre à MoveObject doit être donnée en unitée de distance/seconde. Sous SAMP, l'unité de distance peut être confondue avec le mètre.
Ce qui nous donne 10 m/s soit une vitesse de 10*3600/1000 = 36 km/h. Je ne dirais donc pas que c'est énorme.

++
Syg
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: chneuls le 21 Octobre 2010, 14:08:41
J'avais oublié que c'étais une voiture  :bangin
 :lmao
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: Bl4st3r67 le 21 Octobre 2010, 19:26:27
Merci :) Mais j'ai deux erreurs xD :

Code: (pawn) [Sélectionner]
C:\Users\NevadaKee\Desktop\Serveur\gamemodes\TEST.pwn(146) : error 017: undefined symbol "GetXYFrontOfAngle"
C:\Users\NevadaKee\Desktop\Serveur\gamemodes\TEST.pwn(168) : error 017: undefined symbol "GetXYFrontOfAngle"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.

Voilà le code.. ^^ :

Code: (pawn) [Sélectionner]
if (strcmp("/Avancer", cmdtext, true, 10) == 0)
{
if(IsPlayerConnected(playerid))
{
if(InfosJoueur[playerid][Test1]==1) // Test
{
GetObjectPos( Test, x, y, z );
GetObjectRot( Test, ax, ay, az );
GetObjectPos( TestBis, x, y, z );
GetObjectRot( TestBis, ax, ay, az );
GetXYFrontOfAngle( x, y, az, 20 );
MoveObject(Test,x+100000,y,z,6);
MoveObject(TestBis,x+100000,y,z,6);
}
else if(InfosJoueur[playerid][Test1]==0)
   {
       SendClientMessage(playerid, COLOR_RED, "Tu ne peux pas tester."); // Faites pas gaffe a ce que j'ai écrit xD
               }
}
return 1;
}

Merci de m'aider si vous pouvez :P ^^.

++
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: Ssk le 21 Octobre 2010, 19:49:21
béh tu n'as pas inclut mon code, met ça tout en dessous de ton script



GetXYFrontOfAngle( &x, &y, angle, distance )
{
x += distance * floatsin( -angle, degrees );
y += distance * floatcos( -angle, degrees );
}
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: Bl4st3r67 le 21 Octobre 2010, 20:33:45
Ha ok ^^, merci =). Sinon mon code était juste ?

Merci, Bonne soirée =)

++
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: chneuls le 21 Octobre 2010, 20:35:30
x+100000 ?? Oo ?
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: Ssk le 21 Octobre 2010, 21:23:54
Il n'a rien du comprendre à mon code et à ce qu'il faut faire :p
Titre: Re : Faire avancer un objet en ligne droite ?
Posté par: Bl4st3r67 le 22 Octobre 2010, 08:16:37
Enfaite au debut j'avais betement fait un truc qui ressemblait a ça:
en haut du script j'avais mis un truc dans lgenre : new Float:Pos[MAX_OBJECTS][4];

Et pour la commande j'avais fait GetObjectPos(test,Pos[test][0],Pos[test][1],Pos[test][2]);
MoveObject(test,Pos[test][0]+1000000,Pos[test][1],Pos[test][2]);
J'avais mis 1000000 car je voulais que l'objet bouge jusqu'à qu'on fasse /stop. Et en effet je n'ais pas trop compris comment fonctionne ton code Sasuke ^^'.

++