• 03 Mai 2025, 14:13:33


Auteur Sujet: Faire avancer un objet en ligne droite ?  (Lu 1774 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Bl4st3r67

  • *
  • Criminel
  • Messages: 39
    • Voir le profil
Faire avancer un objet en ligne droite ?
« 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.

+-

Hors ligne chneuls

  • *
  • Tueur
  • Messages: 62
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #1 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


Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #2 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 );
}



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Bl4st3r67

  • *
  • Criminel
  • Messages: 39
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #3 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 ^^.

++

Hors ligne chneuls

  • *
  • Tueur
  • Messages: 62
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #4 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

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #5 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 );



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne chneuls

  • *
  • Tueur
  • Messages: 62
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #6 le: 21 Octobre 2010, 10:16:23 »
Bien vu, Sasuke :D
Par contre pour la vitesse de mouvement à 10 c'est énorme x'P

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #7 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 )



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #8 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
Courtesy of GtaManiac

Hors ligne chneuls

  • *
  • Tueur
  • Messages: 62
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #9 le: 21 Octobre 2010, 14:08:41 »
J'avais oublié que c'étais une voiture  :bangin
 :lmao

Hors ligne Bl4st3r67

  • *
  • Criminel
  • Messages: 39
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #10 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 ^^.

++

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #11 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 );
}



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Bl4st3r67

  • *
  • Criminel
  • Messages: 39
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #12 le: 21 Octobre 2010, 20:33:45 »
Ha ok ^^, merci =). Sinon mon code était juste ?

Merci, Bonne soirée =)

++

Hors ligne chneuls

  • *
  • Tueur
  • Messages: 62
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #13 le: 21 Octobre 2010, 20:35:30 »
x+100000 ?? Oo ?

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Faire avancer un objet en ligne droite ?
« Réponse #14 le: 21 Octobre 2010, 21:23:54 »
Il n'a rien du comprendre à mon code et à ce qu'il faut faire :p



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog