Page 1 sur 1

Petit probleme avec un bout de code

Publié : lun. 23/mai/2016 10:18
par Bernie
Bonjour
Si je mets ce code dans une procédure je peux pas faire bouger mon sprite de gauche à droite avec le clavier
j'aimerai savoir pourquoi ? merci

Code : Tout sélectionner

;--- Création du vaisseau
Ship\PosX=350
Ship\PosY=500

Re: Petit probleme avec un bout de code

Publié : lun. 23/mai/2016 10:28
par microdevweb
Un peux vague avec si peux de code ?

Re: Petit probleme avec un bout de code

Publié : lun. 23/mai/2016 14:44
par Bernie
voici un exemple
si je mets le code :

Code : Tout sélectionner

;--- Création du joueur 
Player\Posx=370
Player\Posy=530
dans la procédure Game() mon sprite ne déplace pas ( en utilisant les touches gauche et droite)
si le code est hors de la procédure là ça marche
j'aimerai bien savoir pourquoi ça marche pas dans une procédure .


Code : Tout sélectionner

;---test sprite Move 

;--- Initilisation 
EnableExplicit
If InitSprite()=0 Or InitKeyboard()=0 
  MessageRequester("Erreur", "Impossible d'initialiser le programme ")
  End
EndIf

;---Constantes
Enumeration Windows
  #Main_Windows
EndEnumeration 
Enumeration Sprites
  #Player
EndEnumeration
;--- Structure d'info pour le sprite du joueur 
Structure NewSprite
  Posx.i
  Posy.i
EndStructure

;---Procedure game 
Declare Game()

; --- Gestion du joueur
Global Player.NewSprite

;---Variables globale
Global  gEvent, gWidth=800, gHeight=600

;--- Création de la surface du jeux 
OpenWindow(#Main_Windows,0,0,gWidth,gHeight,"test ",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Windows),0,0,gWidth,gHeight)
;--- Création du joueur 
;Player\Posx=370
;Player\Posy=530

;--- Boucle du programme 
Repeat
  Repeat
    ;--- Pour la fenetre   
    gEvent = WindowEvent()
    Select gEvent
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until gEvent=0
  
  ;---  Pour la partie 2D 
  ClearScreen(RGB(0, 0, 0))

  
ExamineKeyboard()
Game()

  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End


Procedure Game()
  ;--- Dessin du sprite du joueur 
CreateSprite(#Player,40,40)
StartDrawing(SpriteOutput(#Player))
Box(0, 0, 40, 40, RGB(255, 0, 0))
StopDrawing()
;--- Création du joueur 
Player\Posx=370
Player\Posy=530

;--- Affichage du sprite du joueur 
  DisplaySprite(#Player,Player\Posx,Player\Posy)
;---Déplacement du vaisseau avec les touches fleches droite ou gauche
  ;---à Gauche
  If KeyboardPushed(#PB_Key_Left) And Player\Posx>0
    Player\Posx-3
  EndIf
  ;--- à Droite
  If KeyboardPushed(#PB_Key_Right) And Player\Posx <ScreenWidth() -SpriteWidth(#Player)
   Player\Posx + 3
  EndIf  



  EndProcedure

Re: Petit probleme avec un bout de code

Publié : lun. 23/mai/2016 15:30
par microdevweb
Cela est tout à fait normal, tu initialise la position du joueur dans la procédure Game, mais cette procédure est appelée dans la boucle principale donc à chaque appel tu replace le joueur à sa position initial. Alors que tu avais bien fait ligne 36, pourquoi replacer cela ligne 69?

Code : Tout sélectionner

;---test sprite Move 

;--- Initilisation 
EnableExplicit
If InitSprite()=0 Or InitKeyboard()=0 
  MessageRequester("Erreur", "Impossible d'initialiser le programme ")
  End
EndIf

;---Constantes
Enumeration Windows
  #Main_Windows
EndEnumeration 
Enumeration Sprites
  #Player
EndEnumeration
;--- Structure d'info pour le sprite du joueur 
Structure NewSprite
  Posx.i
  Posy.i
EndStructure

;---Procedure game 
Declare Game()

; --- Gestion du joueur
Global Player.NewSprite

;---Variables globale
Global  gEvent, gWidth=800, gHeight=600

;--- Création de la surface du jeux 
OpenWindow(#Main_Windows,0,0,gWidth,gHeight,"test ",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Windows),0,0,gWidth,gHeight)
;--- Création du joueur 
Player\Posx=370
Player\Posy=530

;--- Boucle du programme 
Repeat
  Repeat
    ;--- Pour la fenetre   
    gEvent = WindowEvent()
    Select gEvent
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until gEvent=0
  
  ;---  Pour la partie 2D 
  ClearScreen(RGB(0, 0, 0))

  
ExamineKeyboard()
Game()

  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End


Procedure Game()
  ;--- Dessin du sprite du joueur 
CreateSprite(#Player,40,40)
StartDrawing(SpriteOutput(#Player))
Box(0, 0, 40, 40, RGB(255, 0, 0))
StopDrawing()
;--- Création du joueur 
; Player\Posx=370
; Player\Posy=530

;--- Affichage du sprite du joueur 
  DisplaySprite(#Player,Player\Posx,Player\Posy)
;---Déplacement du vaisseau avec les touches fleches droite ou gauche
  ;---à Gauche
  If KeyboardPushed(#PB_Key_Left) And Player\Posx>0
    Player\Posx-3
  EndIf
  ;--- à Droite
  If KeyboardPushed(#PB_Key_Right) And Player\Posx <ScreenWidth() -SpriteWidth(#Player)
   Player\Posx + 3
  EndIf  



  EndProcedure

Re: Petit probleme avec un bout de code

Publié : lun. 23/mai/2016 16:00
par Bernie
c'etait juste pour tester si ça marchait .
Merci de l'explication