Rotation & Déplacement d'un sprite vers le curseur d'une souris. Voila qui est plus clair.
J'ai pu résoudre la première partie de ma demande qui consiste à demander à un sprite de faire une rotation en direction du curseur de la souris.
L'objectif était de trouver l'angle existant entres deux objets (vecteurs) placés respectivement en x et y.
J'ai appliqué la fonction arc tangente(x0 - x1, y0 - y1) que j'ai multiplié par 180 / PI + 180 pour avoir un angle de 0 à 360°.
Le code pour illustrer ce que je viens de dire.
Code : Tout sélectionner
EnableExplicit
;Quelques variables
Structure Sprite
id.i
x.d
y.d
Speed.d
EndStructure
Global Background, LadyBug.Sprite, Cursor, Event, Angle.f
;Initialisation diverses
InitNetwork() ;Pour le téléchargement des images
InitSprite()
InitKeyboard()
InitMouse()
UseJPEGImageDecoder()
UsePNGImageDecoder()
;Téléchargement des images
If ReceiveHTTPFile("http://www.falsam.com/Download/images/sprites/i2.png", "i2.png") : EndIf
If ReceiveHTTPFile("http://www.falsam.com/Download/images/sprites/blur1.jpg", "blur1.jpg") : EndIf
If ReceiveHTTPFile("http://www.falsam.com/Download/images/sprites/cursordrag.png", "cursordrag.png") : EndIf
;Creation du screen
OpenWindow(0, 0, 0, 630, 410, "test")
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
;Création des sprite
Background = LoadSprite(#PB_Any, "blur1.jpg")
LadyBug\id = LoadSprite(#PB_Any, "i2.png", #PB_Sprite_AlphaBlending)
Cursor = LoadSprite(#PB_Any, "cursordrag.png", #PB_Sprite_AlphaBlending)
;Position initiale de la coccinelle (LadyBug)
LadyBug\x = 315
LadyBug\y = 205
;Boucle evenementielle
Repeat
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
Until Event=0
FlipBuffers()
ClearScreen(RGB(0,0,0))
ExamineKeyboard()
ExamineMouse()
;Affichage du background
DisplaySprite(Background, 0, 0)
;Affichage du curseur de la souris
DisplayTransparentSprite(Cursor, MouseX(), MouseY())
;Calcul de l'angle en degre (0 à 360)
Angle = ATan2(MouseX() - LadyBug\x, MouseY() - LadyBug\y) * 180 / #PI + 180
;Rotation de la cocinelle avec l'angle calculé
;La cocinelle initiale étant affiché à 90°, on retire 90 au résultat obtenu
RotateSprite(LadyBug\id, Angle - 90, #PB_Absolute)
;Affichage de la cocinelle
DisplayTransparentSprite(LadyBug\id, LadyBug\x, LadyBug\y)
Until KeyboardPushed(#PB_Key_Escape)