PureBasic

Forums PureBasic
Nous sommes le Mar 17/Sep/2019 4:09

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 
Auteur Message
 Sujet du message: [RESOLU] Soucis de KeyboardReleased
MessagePosté: Dim 28/Oct/2018 16:35 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Image

Je fais un mini jeu pour un petit contest d'halloween
Je suis embêté par une historie de KeyboardReleased
Lorsque je tire, un rayon sort des yeux de ma citrouille... Mais ce dernier ne disparait pas quand je relache "espace"..
J'ai essayé via ellapsemillisecond de modifier le statu shoot = 1 en shoot = 0 mais rien ni fait.
Je suis sûr que c'est une connerie débile mais je ne la vois pas.
Vu que c'est pour le 31 j'aimerai que vous jetiez un oeil pour voir si vous choppez le problème.

Merci

Lien de l'archive : http://share.ldvmultimedia.com/DBF_HALLOWEEN_ARS.7z

Code:
; Ghost N Pumpkin
; Code / Gfx / Zik By Ar-S
; For DBF Halloween contest 2018


InitSound()           

Enumeration 10

  #ZR
  #ZL
  #PR
  #PL
  #LAZR
  #LAZL
  ; BackGround
  #BG
  ; Zik
  #ZIK
  #eua
EndEnumeration

Global shoot.b

Structure SP
  ID.i
  x.i
  y.i
  s.b
  dir.b
  v.b ; velocité
EndStructure



; INTITIALISATION
Shoot = #False
P.SP
P\ID = #PR
P\X = 950
P\Y = 850
Jump = #True

LAZ.SP
LAZ\ID = #LAZR
LAZ\X = P\X -17
LAZ\Y = P\Y - 17

Global Dim Z.SP(9)



InitSprite()
InitKeyboard()
InitMouse()
UsePNGImageDecoder()
UseJPEGImageDecoder()
UseOGGSoundDecoder()


; Procedure fill(Array Z.SP(1), 9)
Procedure InitGhost()
 
  For i = 0 To 9
    Z.SP(i)\Dir = Random(1,0)
    Z.SP(i)\Y =  Random(910,0)
    If Z.SP(i)\Dir = 0
      Z.SP(i)\ID = #ZR
      Z.SP(i)\X = -180
      Z.SP(i)\s = Random (5,1)
    Else
      Z.SP(i)\ID = #ZL
      Z.SP(i)\X = 1860
      Z.SP(i)\s = Random (5,1)
    EndIf

  Next i
 
EndProcedure



Procedure DisplayGhost()
  For i = 0 To 9
    If Z.SP(i)\Dir = 0
      Z.SP(i)\X +  Z.SP(i)\S
      If Z.SP(i)\X > 1920 + 170
        Z.SP(i)\X = - Random (300,170)
      EndIf
     
    Else
      Z.SP(i)\X -  Z.SP(i)\S
      If Z.SP(i)\X < -170
        Z.SP(i)\X = Random (2060,1920)
      EndIf
    EndIf
    DisplayTransparentSprite(Z.SP(i)\ID, Z.SP(i)\X, Z.SP(i)\Y, Random(180,140) )
   
   
  Next
 
EndProcedure


Macro UpdateLAZ()
If LAZ\ID = #LAZR
  LAZ\X = P\X -17
  LAZ\Y = P\Y -4
Else
  LAZ\X = P\X -12
  LAZ\Y = P\Y - 4
 
EndIf

EndMacro



InitGhost()

OpenWindow(0, 0, 0, 1920, 1080, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 1920, 1080)


; Music & sound
LoadSound(#Zik, "HALLOWEEN_SONG2018.ogg")
LoadSound(#eua, "eua.ogg")
; BackGround
LoadImage(#bg,"Assets/bg.jpg")
;Sprites
LoadSprite(#ZR, "Assets/zl.png", #PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
LoadSprite(#ZL, "Assets/zl.png", #PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
LoadSprite(#PL, "Assets/spg.png",  #PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
LoadSprite(#PR, "Assets/spr.png",  #PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
LoadSprite(#LAZR, "Assets/lazr.png",  #PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
LoadSprite(#LAZL, "Assets/lazl.png",  #PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)

ClipSprite(#ZL,0,0,170,170)
ClipSprite(#ZR,170,0,170,170)


PlaySound(#zik, #PB_Sound_Loop, 40)









Repeat 
  Repeat
    Event = WindowEvent()
     
    Select Event   
      Case #PB_Event_CloseWindow
        End
    EndSelect 
  Until Event=0
   
  ClearScreen(0)
  ExamineKeyboard()
 
  ; Position Laser
  UpdateLAZ()
 
  ; MOUVEMENTS CITROUILLE
  If KeyboardPushed(#PB_Key_Left)
    P\ID = #PL
    LAZ\ID = #LAZL
    P\X - 4
  ElseIf KeyboardPushed(#PB_Key_Right)
    P\ID = #PR
    LAZ\ID = #LAZR
    P\X + 4
   
  ElseIf KeyboardPushed(#PB_Key_Up)
    P\v = -4
    P\Y+P\V
  ElseIf KeyboardPushed(#PB_Key_Down)
    P\v = 4
    P\Y+P\V
   
   
   
  ElseIf KeyboardReleased(#PB_Key_Space)
   
    If shoot = #True
      shoot = #False
    Else
      shoot=#True
    EndIf
 
    Debug "EtatShoot" + shoot
   
     
  EndIf
 
; BG
  StartDrawing(ScreenOutput())
  DrawImage(ImageID(#bg),0,0)
  StopDrawing()
 
 
  ; Affichage des sprites
  DisplayTransparentSprite(P\ID, P\X, P\Y ,255)
  DisplayGhost()
 
 
  If shoot = #True
    DisplayTransparentSprite(LAZ\ID, LAZ\X, LAZ\Y ,255)
    For i = 0 To 9
      coliL = SpriteCollision(LAZ\ID, LAZ\X, LAZ\Y, Z.SP(i)\ID, Z.SP(i)\X, Z.SP(i)\Y)
      If coliL <> 0
        PlaySound(#eua, #PB_Sound_MultiChannel, 40)
        If Z.SP(i)\ID = #ZR
          Z.SP(i)\X = -180
          Z.SP(i)\s = Random (3,1)
        Else
          Z.SP(i)\ID = #ZL
          Z.SP(i)\X = 1860
          Z.SP(i)\s = Random (3,1)
        EndIf
       
        Score + 1
        Debug "score : "+ score
       
      EndIf
    Next i
;     shoot = #False
   
  EndIf
 
  For g = 0 To 9
  coli = SpriteCollision(P\ID, P\X, P\Y, Z.SP(g)\ID, Z.SP(g)\X, Z.SP(g)\Y)
    If coli <> 0
      If Z.SP(g)\ID = #ZR
          Z.SP(g)\X = -180
          Z.SP(g)\s = Random (3,1)
        Else
          Z.SP(g)\ID = #ZL
          Z.SP(g)\X = 1860
          Z.SP(g)\s = Random (3,1)
        EndIf
        Score - 1
        Debug "boom"
        Debug "score : "+ score
    EndIf
  Next g

 
     
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

_________________
~~~~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: Soucis de KeyboardReleased
MessagePosté: Dim 28/Oct/2018 18:24 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1595
Code:
Je suis embêté par une historie de KeyboardReleased
Lorsque je tire, un rayon sort des yeux de ma citrouille... Mais ce dernier ne disparait pas quand je relache "espace"..
Je n'ai pas testé, mais il n'y a que les touches combinables (Alt, Maj, Ctrl, Win) qui ont un état appuyé/relâché (je crois?). Si "espace" est la barre d'espace, elle n'a donc pas d'état enfoncé ou relâché, mais juste "pressée".

:?:

Edit: D'après l'aide, non. Je dis n'importe quoi. :mrgreen: (mais je fais jamais de jeu) :|


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Soucis de KeyboardReleased
MessagePosté: Dim 28/Oct/2018 19:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
non non.. ça marche avec toutes normalement.

Pour espace j'ai enlevé le KeyboardPush

et ai mis

Code:
  ElseIf KeyboardReleased(#PB_Key_Space)
   
    If shoot = #True
      shoot = #False
    Else
      shoot=#True
    EndIf


L'état des boutons est bien pris en compte. Reste maintenant que j'aimerai faire disparaitre mon tire (donc faire passer à #false)
au bout de N sec ou ms et non pas tout de suite après comme actuellement du fait de la ligne 249.

_________________
~~~~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: Soucis de KeyboardReleased
MessagePosté: Dim 28/Oct/2018 19:20 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2797
Localisation: Klyntar
Bonsoir,
je n'ai pas pu essayé ton archive (corrompu) :?

Si je comprend la mecanique de ton jeu, tu fait partir un missile via KeyboardPushed et tu souhaite faire disparaitre le missile quand le joueur relâche la barre ? KeyboardReleased C'est bien ça ?





@++

_________________
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: Soucis de KeyboardReleased
MessagePosté: Dim 28/Oct/2018 19:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Pas vraiment.
En gros je fait apparaitre un sprite lorsque l'on appuye sur Espace..
Je veux que ce sprite disparaisse au bout de N millisecondes afin que le joueur soit obligé d'utiliser space pour chaque apparition sinon c'est trop simple pour lui.

Dans le code je fais en sorte de montrer ce qui ce passe si on appuye sur espace. On rappuy pour faire disparaitre..

(J'ai mis à jour l'archive en 7z.. voir 1er topic.)

_________________
~~~~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: Soucis de KeyboardReleased
MessagePosté: Lun 29/Oct/2018 9:16 
Hors ligne

Inscription: Lun 22/Oct/2018 19:34
Messages: 35
Localisation: Haisnes (62)
Bonjour Ar-S

j'ai modifié la partie touche 'espace', je ne sais pas si c'est ce que tu souhaites...

Code:
ElseIf KeyboardReleased(#PB_Key_Space)
      CreateThread(@shoot(),0)
   
;     If shoot = #True
;       shoot = #False
;     Else
;       shoot=#True
;     EndIf

;     Debug "EtatShoot" + shoot

et rajouter ceci

Procedure Shoot(null)
 
  If shoot = #True
      shoot = #False
    Else
      shoot=#True : Delay(200) : shoot=#False
    EndIf

    Debug "EtatShoot" + shoot
   
  EndProcedure


Avec ceci le shoot à lieu pendant 200ms


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Soucis de KeyboardReleased
MessagePosté: Lun 29/Oct/2018 11:49 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
Code:
InitSprite()
InitKeyboard()
Global shoot, timer
OpenWindow(0,0,0,100,100,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,100,100)
CreateSprite(0,30,30)
SetFrameRate(60)
Repeat
  ClearScreen($CCCCCC)
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Space)
    If Not shoot And timer = 0 : shoot = 1 : timer = ElapsedMilliseconds() : EndIf
  EndIf
  If KeyboardReleased(#PB_Key_Space)
    shoot = 0 : timer = 0
  EndIf
 
  If shoot
    If ElapsedMilliseconds() - timer > 300
      shoot = 0
    Else
      DisplaySprite(0,30,30)
    EndIf
  EndIf
 
  FlipBuffers()
Until WindowEvent() = #PB_Event_CloseWindow


@Christophe avec ceci "Delay(200)" tu bloque le programe pendant 200 ms, donc si on relache la touche, le sprite reste et tu ne peux pas vérifier les colisions. Un delay c'est fait pour freez un programme, pas pour définire une tempo.

@ar-s j'éspère que c'est ça répond à ta question...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Soucis de KeyboardReleased
MessagePosté: Lun 29/Oct/2018 12:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Merci à vous.
@Christophe. En effet, je suis pas chaud pour l'usage du delay en "trichant" avec un thread.
@Boby. Je teste ça dès que possible. ça semble correspondre.

_________________
~~~~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: Soucis de KeyboardReleased
MessagePosté: Lun 29/Oct/2018 14:41 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Après test, boby ta solution marche impec.
Merci encore

_________________
~~~~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  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


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