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

Code : Tout sélectionner

EnableExplicit
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