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)
Position sprite
Re: Position sprite
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".
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Position sprite
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).
Code : Tout sélectionner
EnableExplicit
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Position sprite
Tu as parfaitement raison. Je l'ai rajouté à mon code et heureusement toutes les variables sont déclarées ^-^
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Position sprite
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
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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.