probleme repeat/until Keyboardpushed

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

probleme repeat/until Keyboardpushed

Message par jmg49 »

Bonjour,

décidément je vais pas sortir de la section débutant encore !!

j'effectue une rotation sur un sprite, pendant l'opération, je ne récupère pas la main sur le prog , malgré le examinekeyboard() repeat/until Keyboardpushed

j'ai des codes où ça fonctionne parfaitement où j'effectue aussi des opérations sur des sprites, scrolling , affichages .....

Code : Tout sélectionner


Enumeration
   #sprite
EndEnumeration

Enumeration
  #win
  EndEnumeration



InitKeyboard()

InitSprite()
UsePNGImageDecoder()
OpenWindow(#win, 0,0,1024, 768, "test" , #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
OpenWindowedScreen(WindowID(#win),0,0,1024,768)


LoadSprite(#sprite,"gunther.png")  
Repeat 
  Event= WaitWindowEvent()
For i=0 To 2*360 Step 1
  ExamineKeyboard() 
  RotateSprite(#sprite, i,#PB_Absolute)
  DisplaySprite(0, 250, 260)
  FlipBuffers()
  ClearScreen($0)
Next i


 
   
Until KeyboardPushed(#PB_Key_Escape)


End


Merci à vous
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: probleme repeat/until Keyboardpushed

Message par TazNormand »

Et comme ça, ça t'arrange ?

Code : Tout sélectionner

Enumeration
  #sprite
EndEnumeration

Enumeration
  #win
EndEnumeration

InitKeyboard()

InitSprite()
UsePNGImageDecoder()
OpenWindow(#win, 0,0,1024, 768, "test" , #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
OpenWindowedScreen(WindowID(#win),0,0,1024,768)

LoadSprite(#sprite,"gunther.png")  
i=0
Repeat 
  Event= WaitWindowEvent()
  ;For i=0 To 2*360 Step 1
  ExamineKeyboard() 
  RotateSprite(#sprite, i,#PB_Absolute)
  DisplaySprite(0, 250, 260)
  FlipBuffers()
  ClearScreen($0)
  i+1
  If i>(2*360) ; tes valeurs de For...Next	    
    i=0
  EndIf  
  ;Next i
Until KeyboardPushed(#PB_Key_Escape)
  
End
Image
Image
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: probleme repeat/until Keyboardpushed

Message par jmg49 »

ah oui , ça m'arrange bien !! bon j'ai enlevé le waitwindowevent() parcequ'il fallait que je bouge la souris dans la fenêtre pour que ça tourne sinon :D

merci bien , à retenir pour l'avenir
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: probleme repeat/until Keyboardpushed

Message par TazNormand »

Les boucles "For" sont "gourmandes", donc faut ruser :)
Image
Image
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: probleme repeat/until Keyboardpushed

Message par djes »

Comme déjà dit et indiqué dans la doc, il FAUT traiter les événements de l'écran avec une petite boucle interne (WindowEvent()), sinon c'est le plantage assuré au bout d'un (parfois long) moment...
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: probleme repeat/until Keyboardpushed

Message par falsam »

djes a écrit :Comme déjà dit et indiqué dans la doc, il FAUT traiter les événements de l'écran avec une petite boucle interne (WindowEvent()), sinon c'est le plantage assuré au bout d'un (parfois long) moment...
Et ne pas oublier d'attendre que la pile des évenement Windows soit vide avant de passer aux événement 3D. Technique polémique du double repeat.

La structure d'un code 3D devrait être de cette manière.

Code : Tout sélectionner

Enumeration
  #Mainform
EndEnumeration

Global WWIdth, WHeight
Global Event

InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()

OpenWindow(#Mainform,0,0, 0, 0, "", #PB_Window_SystemMenu | #PB_Window_Maximize)
OpenWindowedScreen(WindowID(#Mainform),0,0,800,600,0, 0, 0)

KeyboardMode(#PB_Keyboard_International)
 
;Lumiere et ombre
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
WorldShadows(#PB_Shadow_Additive)

; Camera 
Camera = CreateCamera(#PB_Any,0,0,100,100)
CameraBackColor(Camera, RGB(145, 182, 201))

MoveCamera(Camera, 2, 5, 15, #PB_Absolute)  
CameraLookAt(Camera, 0,0,0)   

Repeat ;Evenement Windows
  Repeat ;Evenement 3D
    Event  = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
        
    EndSelect
  Until Event = 0 ;C'est vide : Passons à la suite
  
  If ExamineKeyboard()  
    If KeyboardPushed (#PB_Key_Escape)
      Break
    EndIf
  EndIf
  
  ; Rendu de la scéne
  RenderWorld(30)
  FlipBuffers()   
ForEver
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%
Azur
Messages : 40
Inscription : ven. 22/mai/2009 23:58

Re: probleme repeat/until Keyboardpushed

Message par Azur »

Hello, j'ai trouvé ça intéressant la remarque sur les boucles FOR NEXT j'ai fais un test et j'arrive à la conclusion inverse, la boucle FOR serait quasiment 20% plus rapide, testé sur un vieux portable sous Linux.
Alors au risque de me faire qualifier une fois de plus de posteur, un peu borderline je pose la question, comment se fesse ?

Code : Tout sélectionner

EnableExplicit

Define t=ElapsedMilliseconds()

Define i
For i=0 To 1000000
Next i

Debug ElapsedMilliseconds()-t

;----------------------------------

Define t=ElapsedMilliseconds()

Define j
j=0
Repeat
j+1
Until j=1000000

Debug ElapsedMilliseconds()-t
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: probleme repeat/until Keyboardpushed

Message par TazNormand »

@ Azur : je pense que les boucles FOR sont plus rapides car leur équivalent Assembleur l'est, pas de "gros" test.

Quand je dis qu'elles sont "lourdes", j'entends par là qu'il faut gérer la sortie d'une boucle par "exception", le processus normal fait qu'on ne sort pas généralement d'une boucle FOR...NEXT, même si on trouve des EXIT FOR/BREAK dans les différents langages de programmation.

Enfin, ce n'est que mon avis, je peux aussi me tromper :oops:
Image
Image
Répondre