[OK] OpenWindowScreen() freeze pendant qu'un jeu est lancé
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan
J'ai changé mes condition de tests en compilant le code pure basic avec le sous sytéme OpenGl.
Malgré le changement de résolution, mon jeu plein ecran (Age of empire) et mon jeu Pure Basic Cohabitent parfaitement. Je peux basculer de l'un à l'autre sans soucis.
Une autre remarque : L'option sous system OpenGL dans les paramètres de compilation me permet de basculer une application 3D Pure Basic d'un moniteur à un autre. Chose qui n'est pas possible de faire sans cette option.
Malgré le changement de résolution, mon jeu plein ecran (Age of empire) et mon jeu Pure Basic Cohabitent parfaitement. Je peux basculer de l'un à l'autre sans soucis.
Une autre remarque : L'option sous system OpenGL dans les paramètres de compilation me permet de basculer une application 3D Pure Basic d'un moniteur à un autre. Chose qui n'est pas possible de faire sans cette option.
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan
bon en fait, c'est pas vraiment le programme graphique qui plante !
mais plutot la Sortie du prg "Screen3DRequester" !
car au final les exemples 3D de Purebasic incluent tous le lanceur "Screen3DRequester" !!
c'est c'est donc ce lanceur ...qui lance le prg 3D ...
lorsqu'on quitte le prg 3D ... (apres avoir fait la manip de lancer un jeux 3D plein ecran par dessus notre exemple/ puis de l'avoir quitté .... )
on quitte bien l'exemple 3D ....
le plantage a lieu au moment de Quitter le lanceur !"Screen3DRequester" ... du moins il me semble ....
je vais faire un test sans ce lanceur pour voir ....
mais plutot la Sortie du prg "Screen3DRequester" !
car au final les exemples 3D de Purebasic incluent tous le lanceur "Screen3DRequester" !!
c'est c'est donc ce lanceur ...qui lance le prg 3D ...
lorsqu'on quitte le prg 3D ... (apres avoir fait la manip de lancer un jeux 3D plein ecran par dessus notre exemple/ puis de l'avoir quitté .... )
on quitte bien l'exemple 3D ....
le plantage a lieu au moment de Quitter le lanceur !"Screen3DRequester" ... du moins il me semble ....
je vais faire un test sans ce lanceur pour voir ....
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan
Je l'ai fait sans ce lanceur et j'ai le même phénomène. Plantage sur le End.Dobro a écrit :je vais faire un test sans ce lanceur pour voir ....
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan
oui , je confirme ! .... ça se complique 

Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan
....
Dernière modification par Backup le mar. 19/août/2014 9:56, modifié 5 fois.
Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan
A falsam et à Dobro :
Je vous remercie tous les deux pour vos interventions respectives et merci à Dobro d'avoir mis sur le forum anglais l'explication du bug.
Avec OpenGL il n'y a aucun souci et donc je ne serais pas étonné qu'avec le sous-système OpenGL cela fonctionne mais il faut se dire que le comportement avec le sous-système OpenGL n'est pas le même avec certaines instructions PB.
Pour se convaincre qu'OpenGL fonctionne bien, c'est d'ouvrir l'exemple PB OpenGL qui fait tourner un cube en 3D, mais pas avec Ogre et DirectX, mais avec OpenGL. D'ailleurs, c'est du code OpenGL.
Il y a bien un problème avec les écrans graphiques, en 2D et en 3D, même si en 2D on peut améliorer les choses.
Encore une fois, merci à vos deux pour vos aides respectives.
Je vous remercie tous les deux pour vos interventions respectives et merci à Dobro d'avoir mis sur le forum anglais l'explication du bug.
Avec OpenGL il n'y a aucun souci et donc je ne serais pas étonné qu'avec le sous-système OpenGL cela fonctionne mais il faut se dire que le comportement avec le sous-système OpenGL n'est pas le même avec certaines instructions PB.
Pour se convaincre qu'OpenGL fonctionne bien, c'est d'ouvrir l'exemple PB OpenGL qui fait tourner un cube en 3D, mais pas avec Ogre et DirectX, mais avec OpenGL. D'ailleurs, c'est du code OpenGL.
Il y a bien un problème avec les écrans graphiques, en 2D et en 3D, même si en 2D on peut améliorer les choses.
Encore une fois, merci à vos deux pour vos aides respectives.
Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan
En lisant vos propos sur le isscreenactive(), j'ai trouvé ce code :
Remarque pour Fred: c'est bizarre de mettre le closescreen() en dehors de "IsScreenActive() = 0". Je comprends le fait de respecter la syntaxe. Mais si "IsScreenActive() = 0" (comme je suis en openscreen()) c'est que forcement, je n'ai plus cet écran d'activer. Ensuite, quand "IsScreenActive() <> 0", on réactive l'écran.
Parce qu'après, si on lit le code, on a un closescreen() suivit d'un openscreen().
Bref ... avec les fonctions msdn ci-dessous, le bouton dans la barre de tâche fonctionne mieux. On appuye un seul coup dessus et hop, on revient sur notre programme en pleine ecran.
PeekMessage_(msg.MSG, 0, 0, 0, #PM_REMOVE)
TranslateMessage_(msg)
DispatchMessage_(msg)
Y'a t-il des commandes en PB pour gérer celà ?
Il est simple, et pas long. D'ailleurs, un exemple serait le bienvenue dans la doc. Car la fonction isscreenactive() n'est pas difficile à s'en servir par contre, il fallait savoir qu'il fallait fermer l'écran (closescreen). Puis le rouvrir.InitSprite()
InitMouse()
InitKeyboard()
OpenScreen(1024, 768, 32, "fllscrn")
CreateSprite(0, 64, 64)
StartDrawing(SpriteOutput(0))
Line( 0, 0, 48, 32,$0FF0FF)
Line( 0, 0, 64, 64,$0FF0FF)
Line( 0, 0, 32, 48,$0FF0FF)
StopDrawing()
Repeat
ExamineMouse()
ExamineKeyboard()
ClearScreen(0)
DisplayTransparentSprite(0, MouseX(), MouseY())
FlipBuffers()
If IsScreenActive() = 0
ReleaseMouse(1)
Repeat
While PeekMessage_(msg.MSG, 0, 0, 0, #PM_REMOVE)
; ;TranslateMessage_(msg)
; ;DispatchMessage_(msg)
Wend
Delay(100)
Until IsScreenActive() <> 0
CloseScreen()
Delay(1000)
OpenScreen(1024, 768, 32, "fllscrn")
ReleaseMouse(0)
CreateSprite(0, 64,64)
StartDrawing(SpriteOutput(0))
Line( 0, 0, 48, 32, $0FF0FF)
Line( 0, 0, 64, 64, $0FF0FF)
Line( 0, 0, 32, 48, $0FF0FF)
StopDrawing()
EndIf
Until KeyboardPushed(#PB_Key_Escape)
Remarque pour Fred: c'est bizarre de mettre le closescreen() en dehors de "IsScreenActive() = 0". Je comprends le fait de respecter la syntaxe. Mais si "IsScreenActive() = 0" (comme je suis en openscreen()) c'est que forcement, je n'ai plus cet écran d'activer. Ensuite, quand "IsScreenActive() <> 0", on réactive l'écran.
Parce qu'après, si on lit le code, on a un closescreen() suivit d'un openscreen().
Bref ... avec les fonctions msdn ci-dessous, le bouton dans la barre de tâche fonctionne mieux. On appuye un seul coup dessus et hop, on revient sur notre programme en pleine ecran.
PeekMessage_(msg.MSG, 0, 0, 0, #PM_REMOVE)
TranslateMessage_(msg)
DispatchMessage_(msg)
Y'a t-il des commandes en PB pour gérer celà ?
Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan
il ressemble furieusement au code de Djes
posté ici:
http://www.purebasic.fr/french/viewtopi ... =1&t=10521
le problème de ce code, c'est qu'il n'est pas mis en situation !
j'aimerai le voir fonctionner avec un Sprite qui se promène sur l'ecran (tout seul pas affilié a la souris
)
mon code est peut etre un poil plus Grand... (et encore )
mais il fonctionne avec un Sprite rebondissant sur l'ecran ....sans perdre la position du sprite en cours de deplacement
ce qui fait qu'au retour; on retrouve la situation du jeux
posté ici:
http://www.purebasic.fr/french/viewtopi ... =1&t=10521
le problème de ce code, c'est qu'il n'est pas mis en situation !
j'aimerai le voir fonctionner avec un Sprite qui se promène sur l'ecran (tout seul pas affilié a la souris

mon code est peut etre un poil plus Grand... (et encore )
mais il fonctionne avec un Sprite rebondissant sur l'ecran ....sans perdre la position du sprite en cours de deplacement
ce qui fait qu'au retour; on retrouve la situation du jeux
