Pur débutant en PURE BASIC.... aide images/sprites/souris

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par drfloyd »

non, ce n'est pas lié au code... ca le fait avec n'importe quel code...

c'est ma fenetre qui plante si je passe dessus et fait un clic souris gauche

Aucun message car c'est un vrai plantage... si je suis en plein ecran je dois meme rebooter le pc !

j'ai installé PUREB sur clé USB.... peut etre ca ?
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par drfloyd »

bon ca avance : en fullscreen ca ne plante pas.... la souris fait le job avec le clic gauche

et donc en mode fenetre, des que je clique sur le bouton gauche de la souris tout plante (un peu comme si je quittais sauvagement le jeu)

Ca ne serait pas à cause du mode fenetré que j'ai mis en place ?

Code : Tout sélectionner

OpenWindow(0,0,0,640,400,"COSMOS"):OpenWindowedScreen(WindowID(0), 0, 0, 640, 400)
c'est bon ca ? Il y a d'autre choses à paramétrer en mode fenetre si j'utilise la souris dans cette fenetre ?
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par case »

en mode fenêtré tu dois gérer les evenements windows
il faut metre au moins un

waitwindowevent(0)

dans ta boucle principale
sinon windows pense que le programme a planté.

peut être que c'est ca le problème.

Code : Tout sélectionner

InitSprite()
OpenWindow(0,0,0,1280,1024,"")
OpenWindowedScreen(WindowID(0),0,0,1280,1024)
Repeat
  ev=WaitWindowEvent(0)       ; redonne la main au systeme pour gerer les evenements commenter cette ligne fera sans doute planter
  FlipBuffers()
Until ev=#PB_Event_CloseWindow

sinon dur de trouver sans avoir un code a debugger
ImageImage
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par drfloyd »

j'ai rajouté ça au pif en m'inspirant de ta remarque :

Code : Tout sélectionner

 
 If WindowEvent()=  #PB_Event_CloseWindow
    End
  EndIf
 
j'ai mis ca n'importe ou au milieu de ma boucle

et la ca ne plante plus du tout ! Mais bon voilà, je ne sais pas pourquoi LOL
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par drfloyd »

encore mieux, suffit de mettre ca comme tu proposais...

Code : Tout sélectionner

 WaitWindowEvent(0)

merci à toi !!!
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par drfloyd »

une ultime question,

si je passe en fullscreen, WaitWindowEvent(0) devient un message d'erreur dans ma boucle ("a window should be open")

donc en gros je voudrais faire un :

SI mode fullscreen ALORS ignorer WaitWindowEvent(0)
vurvur
Messages : 60
Inscription : ven. 29/août/2014 19:52

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par vurvur »

drfloyd a écrit :une ultime question,

si je passe en fullscreen, WaitWindowEvent(0) devient un message d'erreur dans ma boucle ("a window should be open")

donc en gros je voudrais faire un :

SI mode fullscreen ALORS ignorer WaitWindowEvent(0)
Comment passes-tu en fullscreen?
Le mieux serait de simplement redimensionner la fenetre aux dimensions de l'écran.
Du coup le WaitWindowEvent(0) reste toujours valide. :)
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par drfloyd »

je ne sais pas faire :) J'ai 2 codes pour l'instant.... 1 fullscreen + 1 fenetré :D

l'idéal seront donc de créer le jeu en mode fenetré et de proposer (via une touche) un agrandissement plein écran (quelque soit la définiton ?) qui cacherait les bordures de la fenetre ? (je veux un vrai plein ecran sans bordure)

Heu, ok... je vais chercher avant de demander la solution :oops:
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par Ar-S »

Pour faire disparaitre les bordures
Tu utilises le flag #PB_Window_BorderLess pour ta fenêtre.

Code : Tout sélectionner

  If OpenWindow(0, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_BorderLess | #PB_Window_ScreenCentered)

Code : Tout sélectionner

InitSprite() 
InitKeyboard()
  
  If OpenWindow(0, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_BorderLess | #PB_Window_ScreenCentered)
    ButtonGadget(0, 170, 135, 45, 20, "Quitter")

    If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160)
      CreateSprite(0, 20, 20)
      If StartDrawing(SpriteOutput(0))
        Box(0, 0, 20, 20, RGB(255, 0, 155))
        Box(5, 5, 10, 10, RGB(155, 0, 255))
        StopDrawing()
      EndIf
    Else
      MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
      End
    EndIf
  EndIf
  
  direction = 2
  Repeat
    ; Il est très important de traiter tous les évènements restants dans la file d'attente à chaque tour
    ;
    Repeat
      Event = WindowEvent()
      
      Select Event 
        Case #PB_Event_Gadget
          If EventGadget() = 0
            End
          EndIf
      EndSelect
      
    Until Event = 0
  
    FlipBuffers() 
    
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Escape)
      End
    EndIf
    

    
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(0, x, x)
    x + direction
    If x > 140 : direction = -2 : EndIf
    If x < 0   : direction =  2 : EndIf
    Delay(1)
  ForEver

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par case »

drfloyd a écrit : donc en gros je voudrais faire un :

SI mode fullscreen ALORS ignorer WaitWindowEvent(0)

vraiment débutant en programmation du coup ^^ :mrgreen:
et la solution est dans l’énoncé

Code : Tout sélectionner

global fullscreen=#false

if fullscreen=#false ; exécuté seulement si n'est pas en fullscreen
   waitwindowevent(0)
endif


si tu met fullscreen=#true ca n'executera pas le waitwindowevent(0)
ImageImage
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par drfloyd »

c'est pas trop que je suis débutant, j'ai réalisé des jeux cultes dans la carrière :mrgreen:

c'est que je ne connaissais pas la commande fullscreen :mrgreen: Elle n'est meme pas dans l'index des commandes du guide en ligne (pour ma défense)

Si en meme temps tu pouvais m'expliquer la commande pour basculer le mode fenétré en fullscreen je te met en personnage dans mon futur RPG :mrgreen:
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par drfloyd »

oups, ta commande fullscreen n'existe pas :mrgreen:
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par case »

drfloyd a écrit :c'est pas trop que je suis débutant, j'ai réalisé des jeux cultes dans la carrière :mrgreen:

c'est que je ne connaissais pas la commande fullscreen :mrgreen: Elle n'est meme pas dans l'index des commandes du guide en ligne (pour ma défense)

Si en meme temps tu pouvais m'expliquer la commande pour basculer le mode fenétré en fullscreen je te met en personnage dans mon futur RPG :mrgreen:

il n'y a pas de commande fullscreen c'est une variable.
si la variable fullscreen est #false(faux) alors waitwindow event.
si tu la met a #true (vrais) la condition n'est pas remplie le code du if n'est pas executé :)

pour passer de fullscreen a fenetré cela implique la fermeture de la fenetre et l'ouverture d'un mode ecran.

tu dois alors rechargé tout les assets graphiques utilisés car ils sont detruit lorsqu'on ouvre/ferme un screen


un petit exemple il y a peut être une autre manière de faire mais je la connais pas :)

Code : Tout sélectionner

InitSprite()
InitKeyboard()
Global fullscreen=0

OpenWindow(0,0,0,1280,1024,"test")
OpenWindowedScreen(WindowID(0),0,0,1280,1024)

fullscreen=0 
Procedure loadassets() ; charge les images, crée les sprites etc...
  CreateSprite(0,64,64)
  StartDrawing(SpriteOutput(0))
  Box(0,0,64,64,$ff00ff)
  StopDrawing()      
EndProcedure


Procedure fullscreentoggle() ; bascule entre mode fenetre et fullscreen
  CloseScreen()              ; ferme le screen existant
  If fullscreen=1            ; si on est en plein ecran
    OpenWindow(0,0,0,1280,1024,"test")  ; ouverture d'une fenetre
    OpenWindowedScreen(WindowID(0),0,0,1280,1024) ; creation du screen 
    fullscreen=0             ; on est plus en fullscreen
  Else                       ; sinon ( si on est en mode fenetre)
    OpenScreen(1280,1024,32,"test") ; ouvre un ecran en fullscreen
    fullscreen=1             ; on defini la variable en fulsscreen =) 1
  EndIf  
  ;
  ;
  loadassets()             ; on recharge les sprites etc... 
  
  
  
  
EndProcedure
loadassets() ; initialisation des images/sprites etc...
Repeat
  If fullscreen=0   ; si on est en fenetré
    ev=WaitWindowEvent()  ; gestion des events
  EndIf
  
  
  
  ExamineKeyboard()   ; clavier :) 
  
  If KeyboardReleased(#PB_Key_Tab) ; si on relache la touche tab
    fullscreentoggle ()            ; bascule le mode ecran 
  EndIf
  If KeyboardReleased(#PB_Key_Escape) ; si on appuiis sur echap
    End   ; on quite
  EndIf
  
  DisplaySprite(0,800,500) ; on affiche le sprite
  
  FlipBuffers() 
ForEver






ImageImage
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par drfloyd »

merci ! Quel forum sympa et efficace pour aider !
vurvur
Messages : 60
Inscription : ven. 29/août/2014 19:52

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri

Message par vurvur »

Un autre exemple plutôt simple (touches F1 - F2 pour tester le changement de mode)

Code : Tout sélectionner

;; old code by va!n, updated by vurvur

Global lWindowExist, lScreenExist, lWinMode, res

Procedure MyFullScreen(lScreenMode)
 If lScreenMode = 1
  lWinMode = 1
  If lScreenExist : CloseScreen() : EndIf
  If lWindowExist : CloseWindow(0) : lWindowExist = 0 : EndIf
  lWindowExist = OpenWindow(0,0,0,640,480,"WindowedMode",#PB_Window_SystemMenu)
  lScreenExist = OpenWindowedScreen(WindowID(0 ), 0, 0, 640, 480, 0, 0, 0)
 Else
  lWinMode = 2
  If lWindowExist : CloseWindow(0) : lWindowExist = 0 : EndIf
  If lScreenExist : CloseScreen() : EndIf
  lScreenExist = OpenScreen(640,480,32,"FullScreen") 
 EndIf
EndProcedure

InitSprite()
InitKeyboard()
MyFullScreen(1) 

Repeat
 ClearScreen(0)
 ExamineKeyboard()

 ;-------- Select ScreenMode --------
 
 If KeyboardPushed(#PB_Key_F1) And lWinMode = 2
   MyFullScreen(1)
 EndIf
  
 If KeyboardPushed(#PB_Key_F2) And lWinMode = 1
   MyFullScreen(2)
 EndIf
 
 ;-------- Check only if WindowedMode --------
 
 If lWinMode = 1
  lEvent = WindowEvent()
  If lEvent = #PB_Event_CloseWindow
   lExitProgram = 1
  EndIf
 EndIf
 ;-------- Draw TestObject and FlipBuffers --------
 
 If StartDrawing(ScreenOutput())
   Box(x,300,50,50,$FFFFFF)
   StopDrawing()
 EndIf
  
 x=x+2
 If x >= 690 : x=-50 : EndIf
  
 FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or lExitProgram
End
Répondre