PureBasic

Forums PureBasic
Nous sommes le Ven 20/Sep/2019 0:26

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 
Auteur Message
 Sujet du message: dupliquer sprite avec touche espace
MessagePosté: Dim 10/Mar/2019 21:55 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2797
Localisation: Klyntar
Bonjour,

Je coince sur une chose qui a l'air anodin. Je souhaite afficher un sprite a une position aléatoire quand j'appuie sur la barre espace.
Bon mon code ci-dessous le fait. Le problème c'est que le sprite disparait juste après. je souhaite qu'il reste afficher. 8O Je pense que je n'affiche surement pas le résultat au bon endroit. Du coup flipbuffer l'efface. :oops:

Ou Structure... :roll:

Voici le code pour mieux comprendre :
Code:
InitSprite()
InitKeyboard()

Procedure DeplacerObjet()
DisplayTransparentSprite(8, Random(800), Random(600))
EndProcedure


If OpenWindow(0, 0, 0, 800, 600, "Gadget and sprites!", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

  If OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
   LoadSprite(8, #PB_Compiler_Home + "examples/sources/Data/PureBasicLogo.bmp")
  EndIf
 
EndIf
   
Repeat
  Repeat
   Event = WindowEvent()
     
     Select Event
      Case #PB_Event_Gadget
       If EventGadget() = 0
        End
       EndIf
       
      Case #PB_Event_CloseWindow
       End
     EndSelect
  Until Event = 0
 
   
  ClearScreen(RGB(0, 0, 0))
  ExamineKeyboard()
  KeyboardMode(#PB_Keyboard_International)
 
;- on affiche le sprite au demarrage
  DisplayTransparentSprite(8, 50, 50)

;- deplace le sprite a l'appuie de la touche espace   
   If KeyboardReleased(#PB_Key_Space)
     DeplacerObjet()
   EndIf
   

   FlipBuffers()
   
;- appuie sur la touche echap
Until KeyboardPushed(#PB_Key_Escape)
End







@++

_________________
Windows 10 x64, PureBasic 5.71 Beta 1 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: dupliquer sprite avec touche espace
MessagePosté: Dim 10/Mar/2019 22:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Salut.
Dans ta boucle principale tu as DisplayTransparentSprite(8, 50, 50)
Donc tu auras beau faire apparaitre ce même sprite à un autre endroit avec ta proce(), à chaque début de boucle tu le repositionnes en 50x50

Ne pas aussi confondre affichage du sprite (toujours la même fonction) et sa position.
Ton second soucis c'est que même si tu vires ta ligne 50x50, ton code actuel dit :
"Si espace est pressé j'affiche le sprite" Donc lui bêtement il affiche le sprite lorsque tu presses... Mais il n'a pas de raison de le laisser afficher puis qu'on est dans une boucle et que espace n'est plus "pressé".. Donc il l'affiche très furtivement.

En gros ta proce ne doit servir qu'à afficher le sprite et ton ESPACE ne doit que modifier ses coordonnées.

PS : Ton titre de topic devrait être "déplacer un sprite avec espace" :wink:
PS2 : Largeur et Hauteur doivent etre max 800-Largeursprite et 600-hauteursprite sinon le sprite peut déborder.

Code:
InitSprite()
InitKeyboard()


Global NewX, NewY

Procedure DeplacerObjet()
  DisplayTransparentSprite(8, NewX, NewY)
EndProcedure


If OpenWindow(0, 0, 0, 800, 600, "Gadget and sprites!", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

  If OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
   LoadSprite(8, #PB_Compiler_Home + "examples/sources/Data/PureBasicLogo.bmp")
EndIf

;Initialisation de la 1ere position !
NewX = 50
NewY = 50

EndIf
   
Repeat
  Repeat
   Event = WindowEvent()
     
     Select Event
      Case #PB_Event_Gadget
       If EventGadget() = 0
        End
       EndIf
       
      Case #PB_Event_CloseWindow
       End
     EndSelect
  Until Event = 0

   
  ClearScreen(RGB(0, 0, 0))
  ExamineKeyboard()
  KeyboardMode(#PB_Keyboard_International)

;- MODIFIE les coords du sprite a l'appuie de la touche espace   
  If KeyboardReleased(#PB_Key_Space)
        NewX =  Random(800-SpriteWidth(8) )
       NewY = Random(600-SpriteHeight(8) )
   EndIf
   
; Affiche le sprite
   DeplacerObjet()

   FlipBuffers()
   
;- appuie sur la touche echap
Until KeyboardPushed(#PB_Key_Escape)
End

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: dupliquer sprite avec touche espace
MessagePosté: Lun 11/Mar/2019 0:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2797
Localisation: Klyntar
Merci Ar-S,

Je comprend mon erreur maintenant.
Par contre je pense que mon titre n'est pas mauvais car je souhaite qu'a l'appuie de la barre espace, le sprite qui est afficher ex: x=100 y=150 reste. Mais qu'un autre s'ajoute via un nouveau random ex x=220 y=10 donc en gros si j'appuie 3 fois, je souhaite faire apparaitre 3 sprites en position random :lol: Tordu le gars.






@++

_________________
Windows 10 x64, PureBasic 5.71 Beta 1 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: dupliquer sprite avec touche espace
MessagePosté: Lun 11/Mar/2019 1:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Il te faut copier créer N coordonnées mais tu n'as besoin que d'un sprite.
Je te conseils de te faire une structure sinon tu vas te paumer.
Ensuite tu fais un tableau qui comportera autant d'entrée que ce que tu veux de sprite.
Dans ce tableau, tu n'auras qu'a stockés les coords X et Y générées à chaque "Espace"
Ainsi seule ton sprite 8 sera utilisé
ex:
Tableau(0) utilisera le sprite 8 en x=400 et y=150
Tableau(1) utilisera le sprite 8 en x=200 et y=350
etc..

Code:
InitSprite()
InitKeyboard()


Global NumSprite = 0


Structure Sp
  X.i
  Y.i
  id.b
EndStructure

Global Dim SP.SP(4) ; On va dire qu'on aura 5 sprites max


Procedure DeplacerObjet()
  For N = 0 To NumSprite
    DisplayTransparentSprite(sp.sp(N)\ID, sp.sp(N)\x, sp.sp(N)\y)
  Next
EndProcedure



If OpenWindow(0, 0, 0, 800, 600, "Gadget and sprites!", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
  If OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
    LoadSprite(8, #PB_Compiler_Home + "examples/sources/Data/PureBasicLogo.bmp")
   
   
    ; Comme pour le 1er sprite on connait les valeurs 50 x 50 on les indique
   
    SP.SP(0)\X = 50
    SP.SP(0)\Y = 50
   
    ; On inscrit dans le tableau 4 autres références de sprite qui utiliseront le même sprite 8
    For i = 0 To 4
      SP.SP(i)\ID = 8
    Next
   
  EndIf
 
 
EndIf

Repeat
  Repeat
    Event = WindowEvent()
   
    Select Event
      Case #PB_Event_Gadget
        If EventGadget() = 0
          End
        EndIf
       
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until Event = 0
 
 
  ClearScreen(RGB(0, 0, 0))
  ExamineKeyboard()
  KeyboardMode(#PB_Keyboard_International)
 
  ;- MODIFIE les coords du sprite a l'appuie de la touche espace   
  If KeyboardReleased(#PB_Key_Space)
    NumSprite + 1
    Debug NumSprite
    ; Délimitation du nombre de sprites
      If NumSprite > 4
        NumSprite = 0
      EndIf
      SP.SP(NumSprite)\X =  Random(800-SpriteWidth(8) )
      SP.SP(NumSprite)\Y =  Random(600-SpriteHeight(8) )
    EndIf
 
  ; Affiche le sprite N FOIS (de 0 à 4 fois)
  DeplacerObjet()
 
  FlipBuffers()
 
  ;- appuie sur la touche echap
Until KeyboardPushed(#PB_Key_Escape)
End

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: dupliquer sprite avec touche espace
MessagePosté: Lun 11/Mar/2019 7:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2797
Localisation: Klyntar
8) Merci bien Ar-S

Je regarderais ça en détail ce soir. :wink:






@++

_________________
Windows 10 x64, PureBasic 5.71 Beta 1 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye