Page 3 sur 4
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : jeu. 26/sept./2019 18:08
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 ?
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : jeu. 26/sept./2019 18:45
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 ?
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : jeu. 26/sept./2019 20:03
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
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : jeu. 26/sept./2019 20:21
par drfloyd
j'ai rajouté ça au pif en m'inspirant de ta remarque :
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
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : jeu. 26/sept./2019 20:30
par drfloyd
encore mieux, suffit de mettre ca comme tu proposais...
merci à toi !!!
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : jeu. 26/sept./2019 20:44
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)
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : jeu. 26/sept./2019 21:02
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.

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : jeu. 26/sept./2019 21:49
par drfloyd
je ne sais pas faire

J'ai 2 codes pour l'instant.... 1 fullscreen + 1 fenetré
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

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : jeu. 26/sept./2019 22:22
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
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : ven. 27/sept./2019 16:07
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 ^^
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)
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : ven. 27/sept./2019 18:24
par drfloyd
c'est pas trop que je suis débutant, j'ai réalisé des jeux cultes dans la carrière
c'est que je ne connaissais pas la commande fullscreen

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

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : ven. 27/sept./2019 18:46
par drfloyd
oups, ta commande fullscreen n'existe pas

Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : ven. 27/sept./2019 18:56
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
c'est que je ne connaissais pas la commande fullscreen

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

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
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : ven. 27/sept./2019 20:28
par drfloyd
merci ! Quel forum sympa et efficace pour aider !
Re: Pur débutant en PURE BASIC.... aide images/sprites/souri
Publié : ven. 27/sept./2019 21:47
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