Page 2 sur 2
Re: Position sprite
Publié : mer. 27/juin/2018 23:00
par Ekim
Oui c'est précisément ça que je voulais) il ne me reste plus qu'à comprendre les arcanes de ton code @falsam,
encore merci à vous tous pour votre aides)
Re: Position sprite
Publié : jeu. 28/juin/2018 6:43
par Micoute
C'est vrai que j'avais oublié qu'on ne donne pas de viande à un bébé, mais le code que je t'ai donné pourra, j'en suis sûr, te servir plus tard quand tu te seras "aguerri".
Re: Position sprite
Publié : jeu. 28/juin/2018 16:51
par boby
Juste un petit conseil à apporter, vue que tu es débutant, je te conseil FORTEMENT de commencer TOUS tes codes par
Ca te forcera à déclarer toutes tes variables, une TRÉS bonne habitude à prendre, PureBasic crée automatiquement une variable que tu appel pour la première fois si tu ne l'as pas déjà déclarée mais c'est loins d'être le cas de tous les languages (c'est même plutot une norme de devoir déclarer ses variables).
Re: Position sprite
Publié : jeu. 28/juin/2018 17:31
par falsam
Tu as parfaitement raison. Je l'ai rajouté à mon code et heureusement toutes les variables sont déclarées ^-^
Re: Position sprite
Publié : jeu. 28/juin/2018 21:36
par comtois
Basé sur le code de falsam, on peut jouer au chat et à la souris
Code : Tout sélectionner
EnableExplicit
; Structure d'un vecteur 2D
Structure Vector2
x.f
y.f
EndStructure
; Structure minimum d'un sprite
Structure newSprite
id.i
position.Vector2
EndStructure
;Definition du sprite
Global.newSprite Chat,Souris
; Définition de la vitesse de déplacement
Global Speed.f = 3
; Sommaire de l'application
Declare Start()
Declare NormalizeVector(*v.Vector2)
Start()
Procedure Start()
Protected Direction.Vector2
Protected DistanceNonNulle
InitSprite()
InitKeyboard()
InitMouse()
OpenWindow(0, 0, 0, 0, 0, "FullScreen", #PB_Window_BorderLess | #PB_Window_Maximize)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0))
;Chargement du sprite (ici on prendra une image figurant dans les exemples de PureBasic)
UsePNGImageDecoder()
Chat\id = LoadSprite(#PB_Any, #PB_Compiler_Home + "Examples\Sources\Data\world.png", #PB_Sprite_AlphaBlending)
Chat\position\x = 10
Chat\position\y = 10
Souris\id = LoadSprite(#PB_Any, #PB_Compiler_Home + "Examples\Sources\Data\Drive.bmp")
Repeat
Repeat : Until WindowEvent() = 0
ClearScreen(RGB(55, 55, 55))
ExamineMouse()
Souris\position\x = MouseX()
Souris\position\y = MouseY()
;Direction à suivre pour rejoindre la souris
Direction\x = Souris\position\x - Chat\position\x
Direction\y = Souris\position\y - Chat\position\y
DistanceNonNulle = NormalizeVector(@Direction)
DisplaySprite(Chat\id, Chat\position\x, Chat\position\y)
DisplaySprite(Souris\id, Souris\position\x, Souris\position\y)
;Calculer la nouvelle position du sprite
If DistanceNonNulle
Chat\position\x + Direction\x * Speed
Chat\position\y + Direction\y * Speed
EndIf
ExamineKeyboard()
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
EndProcedure
Procedure NormalizeVector(*V.Vector2)
Define.f magSq, oneOverMag
magSq = *V\x * *V\x + *V\y * *V\y
If magsq > 0
oneOverMag = 1.0 / Sqr(magSq)
*V\x * oneOverMag
*V\y * oneOverMag
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure