• 04 Juin 2026, 09:13:58


Auteur Sujet: Problème Speedo FSpeed  (Lu 812 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne koukou777

  • *
  • Nouveau
  • Messages: 23
    • Voir le profil
Problème Speedo FSpeed
« le: 14 Avril 2010, 16:16:03 »
Bonjour,

Je vien de trouver un Speedo génial, mais malheuresement, la vitesse n'est pas réèlle ! Elle est beaucoup trop haute, et je n'arrive pas a faire en sorte qu'elle soit parfait. Je ne trouve pas la ligne non plus.

Merci de m'aider.
Etant donner que chez moi PastBin bug, je l'est upload je vous envoit le .pwn pour que vous puissez le voir ...
« Modifié: 14 Avril 2010, 16:18:20 par koukou777 »

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Problème Speedo FSpeed
« Réponse #1 le: 14 Avril 2010, 16:50:13 »
C'est à la ligne 547 du script que tu as donné, la vitesse est calculée et stockée dans la variable Dis.

Tout d'abord, ce FS démarre un timer par slot du serveur, ce qui fait vraiment beaucoup de timers (si ton serveur à 200 slots, le FS démarrera 200 timers !!).

Ensuite, la vitesse n'est calculée qu'avec les coordonnées X et Y ce qui fait que lors d'une chute verticale, cette vitesse sera de 0 (alors qu'elle est de l'ordre de 500 km/h lors d'une chute libre avec un véhicule).

De plus, l'unité est m/h, ce qui n'est pas très intéressant. Il faudrait faire un division par 1000 pour avoir des km/h.

Enfin le calcul de la vitesse est fait de manière très compliqué (floatabs, floatsub, floatpower) alors que les opérateurs de base fonctionnent très bien avec les nombres à virgule flottante (et font exactement la même chose).
NB : D'ailleurs, c'est une hérésie de prendre la valeur absolue d'une différence qu'on va élever au carré. Dans tous les cas, abs((X2-X1)^2) = (X2-X1)^2

Bref, FS fait pour quelqu'un qui est fâché avec les math et la programmation ...

Mais il existe beaucoup de FS où tu trouveras le calcul de la vitesse plus simple et plus juste.

Mais le mieux, c'est d'utiliser GetPlayerVelocity ou GetVehicleVelocity, ces fonctions sont beaucoup plus justes qu'un timer dont la durée reste aléatoire.
Exemple :
new Float:Vitesse, Float:Vx, Float:Vy, Float:Vz;

/* Vitesse du vehicule */
GetVehicleVelocity (GetPlayerVehicleID (playerid), Vx, Vy, Vz); // Si le joueur est dans un véhicule
Vitesse = floatsqroot(Vx*Vx+Vy*Vy+Vz*Vz)*200.0;

++
Syg

Courtesy of GtaManiac