Question déplacement math

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Question déplacement math

Message par Fig »

Bonjour,
J'ai donc une question à vous poser concernant le déplacement d'un sprite pour un jeu type age of empire.

J'ai 2 pointx x1,y1 x2,y2 et une vitesse. Je pars du point 1 vers le point 2.

Je souhaite obtenir le point suivant du déplacement, pour que le déplacement ai une vitesse constante. :angel:

J'ai essayé un truc mais ca bug et c bancal parecque je suis vraiment nul en math ! :cry:

C'est un probleme classic je suppose, que vous avez déja la réponse.
Ca fait déja deux semaines que je galère la dessus, en désespoir de cause je m'en remet à vous... :?

Si en plus c'était pas trop lent... ca serait le pied.

merci bien. :?:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

C'est facile. Cependant, tu ne precise pas si on va tout droit ou si on parcourt un chemin avec tournant a angle droit.

Bon, disons qu'on va de A (xa et ya sont les coordonnées X et Y du point A) vers B (pareil que pour A au niveau coordonnées) directement :

Code : Tout sélectionner

distance = sqr((xb-xa)*(xb-xa)+(yb-ya)*(yb-ya))
Voila, tu as la distance entre le point A et le point B

Si par exemple tu as une distance de 50, ca veux dire que tu as 50 pixels qui separent les 2 points.
Donc, si un personnage marche de A vers B, tu le feras marcher de 2 ou 3 pixels par images. Un cheval au galop lui, ira a 10 ou 12 pixels par images.

:wink:
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

ou tu peux lire ce tut, le chapitre "un peu de math"

http://www.games-creators.org/wiki/Pure ... t_Sprite3D
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Message par Fig »

bon, merci beaucoup... Il faut que je réfléchisse beaucoup là...

voyons, sqr c'est square mais je suppose que c'est la racine carré (RMS ?)en non le carré car je crois reconnaitre pythagore ...

Mais j'ai beaucoup de mal avec ton exemple Comtois parceque je ne suis pas familiarisé avec les procédures et tout ces choses de langages haut niveau... Pour moi j'avoue à ma honte que les programmes sont linéaires et les tableaux sont des octets les uns derrieres les autres auxquels ont accede par des calculs arf :? :oops:

... Ha ok, c'est bon, j'ai compris !! :idea:

Merci mille fois !!! :D
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

Ah j'ai retrouvé ce topic :) Ca fait 4 jours que je le cherche, je savais plus sur quoi (forum) je l'avais vu.
Comtois doit avoir une petite idée de pourquoi d'ailleur j'ai besoin de ce calcul ;).

Merci pour vos reponses au faite ! :)
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

Bonjour,

Donc j'ai suivi le tutoriel que Comtois propose, et j'ai reussi à faire ce que je voulais :) Sauf que je trouve le changement d'angle trop agressif et comme il s'agit de chasseur, avion, je dois le faire plus doucement.
J'ai dessiné comment je vois la chose, il n'y a pas de pachfinding, donc le changement d'angle peut se faire ainsi :
Image

Je suis vraiment un boulet en trigonométries, si vous pouviez m'aider... dans mon cas carrement me proposer un code pour faire ca... ... ... :(

Si vous avez d'autre proposition pour le changement d'angle de mon chasseur/avion je suis preneur. C'est en 3D, mais je travail que sur 2 plans, donc c'est en 2D.

Merci
Anonyme

Message par Anonyme »

Code : Tout sélectionner

Pos_X + Speed * cos(AngDeg*#pi/180)
Pos_Y + Speed * sin(AngDeg*#pi/180)
As tu essayé cela ?
:wink:
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

Cpl.Bator a écrit :

Code : Tout sélectionner

Pos_X + Speed * cos(AngDeg*#pi/180)
Pos_Y + Speed * sin(AngDeg*#pi/180)
As tu essayé cela ?
:wink:
Merci d'avoir répondu aussi vite Caporal :)
Que représente AngDeg ici ?
En passant, je rappel que :
_Slide_ a écrit :Je suis vraiment un boulet en trigonométries
Hihi :)

Merci
Anonyme

Message par Anonyme »

Angle en degrees tout simplement :wink:
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

Cpl.Bator a écrit :Angle en degrees tout simplement :wink:
J'ai commencé un petit code à l'instant, j'ai dû certainement me perdre... tjrs eu du mal en trigo, mais que l'on me dise pas que je n'ai pas cherché (rien de visuel, que du théorique) :

Pox_X et Pos_Y sont les coordonnées de mon sprite.

Code : Tout sélectionner

Rayon = 10 ; Rayon du cercle de rotation

Centre_X = Pos_X + ???? ; Position du centre du cercle de rotation
Centre_Y = Pos_Y + ???? ; Position du centre du cercle de rotation
; on fait un tour de cercle
for AngDeg = 1 to 360
  Pos_X = Centre_X + Rayon * cos(AngDeg)
  Pos_Y = Centre_Y + Rayon * sin(AngDeg)
endif
Apres ce code, on est revenu au point de départ. C'est un bon début lol.
Ce qui me manque c'est les "????", si vous pouvez maider... merci :).
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

Le graph qui va avec mon code :
Image

Help :)
Anonyme

Message par Anonyme »

Pour Tracer un cercle , c'est comme ca :
for AngDeg = 1 to 360
Pos_X = Centre_X + Rayon * cos(AngDeg*#pi/180)
Pos_Y = Centre_Y + Rayon * sin(AngDeg*#pi/180)
endif
Pour déplacer un sprite, c'est la meme chose :wink:
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

Merci :) J'ai besoin du centre surtout :'( help :)
Mon sprite est sur le cercle, ce n'est pas le centre, donc le centre de rotation, il me le faut le calculer, j'ai dessiné un petit graph pour etre plus clair tantôt.

Merci Caporal :)

Image

edit : il y a un angle droit entre le vecteur et le rayon du cercle.
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Bon, je ne sait si c'est ce que tu cherche, mais voici le prolongement du code
de Cpl.Bator, je l'ai fait avec DM3D, heeuu (j'ai honte...) je sais pas comment
on fait faire une rotation a un sprite2D avec PB :?

Code : Tout sélectionner

; Fichiers Include 
IncludePath "Include\"  :  IncludeFile "dreamotion3d.pbi"

  Global *sp1.CSprite2D

  ;  Initialisation des différents modules
  If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
    End
  EndIf

  ; Initialise la fenêtre graphique
  DM_Graphics3D(800, 600, 32,  0, 1)
  SetCurrentDirectory("media/")
  
  ;-------------------------
  ; Charge un petit sprite
  ;-------------------------
  *sp1 = DM_LoadSprite2D("sp1.png", 10,10)

  AngDeg.l=0
  Centre_X = 200
  Centre_Y = 200
  Rayon = 50

  Repeat
  	ExamineKeyboard()
	
  	If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
  	  Quit=1
  	EndIf
  	

   AngDeg +1  
   Pos_X = Centre_X + Rayon * Cos(AngDeg*#PI/180)
   Pos_Y = Centre_Y + Rayon * Sin(AngDeg*#PI/180)
   DM_PositionSprite2D(*sp1, Pos_X, Pos_Y)
   DM_RotateSprite2D(*sp1, AngDeg)
   
  	; ---------------
  	;      Rendu
  	; ---------------
  	DM_BeginScene()
	      DM_ClsScreen(0,0,0)
	      DM_DrawSprite2D(*sp1)	    
  	DM_EndScene()
  	

  Until Quit=1

  DM_ClearGraphics()
  End
  
Force et sagesse...
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

Si c'est ce que je cherche à faire, mais j'aimerai déterminer le centre de rotation automatiquement en fonction de la position du sprite et son orientation.
Là tu as fixé comme valeur 200 et 200 :'(.

Merci pour le code source, comme ca on peut tester de la théorie à la pratique sans trop d'effort maintenant ;). Vive Dreamotion :D
Répondre