[Résolu] Comment déplacer un sprite en cliquant dessus

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] Comment déplacer un sprite en cliquant dessus

Message par Micoute »

Bonjour à tous,

je souhaiterais apprendre mes petits-enfants à connaître la monnaie, mais j'aurais besoin de connaître comment on peut déplacer des sprites en le glissant avec le bouton de la souris pressé.

Naturellement, et je le regrette beaucoup, je n'ai pas d'ébauche de code, mais je pense que vous avez compris ma démarche et je vous remercie pour votre aide bienveillante.
Dernière modification par Micoute le lun. 10/juil./2017 20:35, modifié 1 fois.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Comment déplacer un sprite en cliquant dessus

Message par falsam »

Code simplifier pour une seule devise

Code : Tout sélectionner

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))

;Creation de la souris
Mouse  = CreateSprite(#PB_Any, 8, 8)
StartDrawing(SpriteOutput(Mouse))
Box(0, 0, 8, 8, #Red)
StopDrawing()

;Creation d'une devise
Euro  = CreateSprite(#PB_Any, 128, 64)
StartDrawing(SpriteOutput(Euro))
Box(0, 0, 128, 64, #Yellow)
StopDrawing()
EuroX = 0
EuroY = 0

Repeat 
  Repeat : Until WindowEvent() = 0
  
  ;Background
  ClearScreen(RGB(75, 0, 130))
  
  ;Affichage devises
  DisplaySprite(Euro, EuroX, EuroY) 
  
  ;Affichage souris en dernier
  DisplaySprite(Mouse, MouseX(), MouseY())
  
  ;Evenement clavier
  If ExamineKeyboard()
  EndIf
  
  ;Evenement souris
  If ExamineMouse()
    If MouseButton(#PB_MouseButton_Left)
      MousePress = #True
    Else
      MousePress = #False
    EndIf
    
    ;Test collision entre souris et devise
    If SpriteCollision(Mouse, MouseX(), MouseY(), Euro, EuroX, EuroY) And MousePress = #True
      EuroX = MouseX() - SpriteWidth(Euro)/2
      EuroY = MouseY() - SpriteHeight(Euro)/2
    EndIf
  EndIf 
  
  FlipBuffers()
  
Until KeyboardReleased(#PB_Key_Escape)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Comment déplacer un sprite en cliquant dessus

Message par falsam »

Une idée de ce que ça peut donner avec 3 devises dans un Array de sprites

Code : Tout sélectionner

Structure Devise
  sprite.i
  nom.S
  x.f
  y.f
EndStructure

Dim Devises.Devise(2)

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))

;Creation de la souris
Mouse  = CreateSprite(#PB_Any, 8, 8)
StartDrawing(SpriteOutput(Mouse))
Box(0, 0, 8, 8, #Red)
StopDrawing()

;Creation des devises (3 ça ira pour ce test)
Devises(0)\nom = "Euro"
Devises(1)\nom = "Dollars"
Devises(2)\nom = "Yen"

;Creation des sprites associés
For n = 0 To 2
  With Devises(n)
    \sprite = CreateSprite(#PB_Any, 128, 64)
    
    StartDrawing(SpriteOutput(\sprite))
    Box(0, 0, 128, 64, #White)
    DrawText(5, 5, \nom, #Black, #White)
    StopDrawing()
    \x = (150 * n)  + 50
    \y = 100
  EndWith
Next

Repeat 
  Repeat : Until WindowEvent() = 0
  
  ;Background
  ClearScreen(RGB(75, 0, 130))
  
  ;Affichage devises
  For n = 0 To 2
    With Devises(n)
      DisplaySprite(\sprite, \x, \y)
    EndWith 
  Next    
  
  ;Affichage souris en dernier
  DisplaySprite(Mouse, MouseX(), MouseY())
  
  ;Evenements clavier
  If ExamineKeyboard()
  EndIf
  
  ;Evenements souris
  If ExamineMouse()
    If MouseButton(#PB_MouseButton_Left)
      MousePress = #True
    Else
      MousePress = #False
    EndIf
    
    ;Test collision entre souris et devises
    For n = 0 To ArraySize(Devises())
      With Devises(n)
        If SpriteCollision(Mouse, MouseX(), MouseY(), \sprite, \x, \y) And MousePress = #True
          \x = MouseX() - SpriteWidth(\sprite)/2
          \y = MouseY() - SpriteHeight(\sprite)/2
          Break
        EndIf
      EndWith
    Next
  EndIf 
  
  FlipBuffers()
  
Until KeyboardReleased(#PB_Key_Escape)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Re: Comment déplacer un sprite en cliquant dessus

Message par Tonio »

Un grand merci pour ce partage Falsam

je vais étudié tes codes ils vraiment sont très inintéressant pour apprendre a déplacer un sprite avec la souris
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment déplacer un sprite en cliquant dessus

Message par Micoute »

Merci falsam, c'est absolument fabuleux, surtout le dernier, car si je ne vais pas utiliser plusieurs devises, j'utiliserai quand même plusieurs pièces et billets différents.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre