[OK] OpenWindowScreen() freeze pendant qu'un jeu est lancé

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

[OK] OpenWindowScreen() freeze pendant qu'un jeu est lancé

Message par Ar-S »

Bonjour,

J'aime bien me mettre une petite radio lorsque je joue à des jeux.
J'ai un openwindowscreen() diffusant en boucle une animation (le spectrum reagissant au son de la lib Fmod lors de lecture de radio en ligne). Or je viens de m'apercevoir que si même le programme fonctionne bien (la radio est ok et la fenêtre n'est pas bloquée), la screen est freezé lorsque je sors du jeu (X-com pour ne pas le citer).

Auriez vous une idée du pourquoi ? Je me dis que c'est sans doute lié au screen que doit utiliser le jeu mais à part ça..
Dernière modification par Ar-S le lun. 02/déc./2013 0:17, modifié 1 fois.
~~~~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
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: openscreen() freeze pendant qu'un jeu est lancé

Message par blendman »

il faudrait plus de précision ^^.
En gros :
- tu lances la radio en openwindowedscreen()
- tu lances ton jeu "bidule.exe" en openscreen (créé en purebasic)
- tu sors du jeu "bidule.exe" et là, ça freeze ?
Sortir = exit (fermer le jeu) , ou juste aller sur le bureau ?

car si par sortir, tu veux dire aller sur le bureau, il faut savoir que tous les sprites de ton jeu sont supprimer, et tu dois tout recharger. il vaut mieux faire un exit il me semble.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: openscreen() freeze pendant qu'un jeu est lancé

Message par Ar-S »

Nonon,

Je lance ma radio (en PB) avec le spectrum en openWindowScreen() et j'ecoute ma radio

Je lance un jeu commerciale (X-Com) et je joue (en plein ecran)..
Lorsque je quitte le jeu, je m'aperçois que l'openscreen de ma radio est freezé
Dernière modification par Ar-S le dim. 01/déc./2013 21:03, modifié 1 fois.
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: openscreen() freeze pendant qu'un jeu est lancé

Message par Backup »

l'ideal aurai été que ton "Spectrum" fut en openWindowedScreen ............
histoire de beneficier des events .... :)

si pour une raison ou une autre tu quittes le mode Screen , c'est a toi de rafraichir les Sprites

.... ne sachant pas comme tu as codé ton histoire , je ne m'avanturerai pas plus loin ;)

pour rappel :
Resultat = IsScreenActive()
Description

Les jeux et les applications en mode plein écran programmés en PureBasic fonctionnent toujours en mode multitâche, pour éviter de bloquer tout le système (que ce soit sur AmigaOS, Windows ou Linux). En d'autre termes, l'utilisateur peut à tout moment revenir sur son bureau pour faire autre chose. Si c'est le cas cette commande renverra 0, indiquant au programmeur de prendre les mesures nécessaires (libérer le clavier et la souris (ReleaseMouse()), arrêter les sons et les musiques, mettre le jeu en pause etc...).
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: openscreen() freeze pendant qu'un jeu est lancé

Message par Ar-S »

Mais le spectrum est en openwindowscreen (pas en openscreen j'ai ecris trop vite).
~~~~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
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: openscreen() freeze pendant qu'un jeu est lancé

Message par Ar-S »

J'ai résolu mon soucis.

En surveillant lorsque la fenêtre pert le focus avec un GetActiveWindow() ça marche.
Si la fenêtre n'a plus le focus, je ferme l'openwindowscreen() et la réouvre lorsque la fenêtre reprend le focus.
Je retrouve bien mon spectrum. :P
~~~~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
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan

Message par pat »

Bonjour,

Je souhaite donner mon avis sur certaines choses au sujet des écrans graphiques avec des fenêtres (OpenWindowedScreen).
C'est une faiblesse que de travailler en PB avec ces écrans graphiques quand on veut faire du multitâche (par exemple jouer un jeu avec une fenêtre créé en PB avec un écran graphique, l'arrêter temporairement, sans fermer la fenêtre, et ouvrir un autre programme qui aura une autre résolution d'écran).
Il faudra, en PB, réouvrir l'écran graphique. Ce qui peut être fastidieux car il faudra à chaque étape de notre programme savoir quand le programme ne sera plus actif et prendre les dispositions nécessaires.
Si en 2D, on peut pallier ces problèmes, en 3D on ne peut que subir les événements.
En effet, en 3D, si on reprend notre jeu créé en 3D, par exemple, pas de problème, tout redémarre normalement mais le problème c'est quand on fermera la fenêtre, avec une erreur à l'instruction END.
Je n'ai pas cessé d'indiquer ça dans le forum et vous pouvez vous même vérifier ces choses.
C'est vraiment dommage car les écrans graphiques sont vraiment bien et parfaitement compatibles avec GUI.
Les problèmes invoquées plus haut ne concernent uniquement quand il y aura changement de résolution d'écran et éventuellement appel du programme Window Defender (sur Vista).
Avatar de l’utilisateur
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

Message par falsam »

pat a écrit :... avec une erreur à l'instruction END.
Bonjour Pat. Effectivement, j'ai vu que plusieurs fois tu avais signalé ce souci. A mon avis tu as un événement 3D ou Windows, qui se produit au moment ou tu fermes ta fenêtre et qui n'est pas géré ou alors tu cliques sur le bouton Arrêter le programme pour quitter sauvagement l’exécution de ton code.
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%
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan

Message par pat »

Merci falsam pour ta réponse.
Je gère parfaitement bien les événements avec les écrans graphiques.
Je te suggère de faire le test suivant, si tu es d'accord, bien évidemment.
Tu me donneras le résultat.

Prend un programme 3D fourni avec PB. Tu le lances dans une fenêtre.
Tu ne quittes pas le programme mais tu bascules dans un autre programme (un jeu par exemple qui a une résolution d'écran différente de celle que tu as actuellement).
Tu rebascules dans ton programme.
1) Pas de problème, ton programme 3D reprend normalement.
2) Maintenant, tu fermes ton programmes 3D.
Tu verras une erreur à l'instruction END.

Il se peut que quelques programmes 3D se ferment bien mais dans la majorité des cas tu trouveras une erreur à l'instruction END.
Fais un essai sur plusieurs exemples de programmes 3D fourni avec PB.

Avec les programmes 2D avec écran graphique, fais le test suivant :
Tu prends un exemple dans les exemples PB mais qui utilisent les écrans graphiques, par exemple un petit exemple qui utilise des sprites.

Tu fais la même chose que pour le programme 3D mais tu verras ceci :
1) Dès que tu rebasculeras dans ton programmes 2D, l'écran graphique sera fermé et la fenêtre toute blanche.

Ce qui veut dire ceci pour la 2D :
Dès qu'il y a changement de résolution d'écran ou qu'on exécute Window Defender (dans Vista), l'écran graphique se ferme systématiquement.
Contrairement à beaucoup de personnes qui pensent qu'il faut recharger les objets, dans la réalité ce n'est pas le cas. En utilisant IsSprite(Id) tu verras, par exemple, que tes sprites sont toujours actifs.

Ce qui veut dire ceci pour la 3D :
L'écran graphique ne se ferme pas mais il y a une erreur dans la libération de quelque chose (mémoire, pile, etc.).

Mieux qu'un très long discours, tu peux vérifier toi-même ces choses.

Tous ces tests doivent se faire avec un changement de résolution d'écran.
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan

Message par pat »

Bonjour à tous,

Ah ! Si quelqu'un d'honnête pouvais dire que je me suis trompé, que j'ai fait une erreur, qu'il n'y a pas de problème avec les écrans graphiques quand on change la résolution d'écran. Cela me ferait taire, à ce sujet, de manière durable, et je ne pourrais qu'accepter cela.
Mais si cela n'est pas le cas, alors que PureBasic corrige les bugs.
Et je n'ai pas d'autres intentions que celles-ci : que les bugs soient corrigés.
Et tout le monde en profiterait. En premier lieu PureBasic, parce qu'il serait de meilleure qualité.
Et PB de dire : faire un post dans le forum anglais.
A ce jour je n'ai pas réussi à le faire.
Avatar de l’utilisateur
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

Message par falsam »

Mince j'avais complètement zapper de te répondre. Désolé.

Bonjour Pat. J'ai reproduit tes conditions de test.
-J'ai ouvert un jeu pb.
-J'ai ouvert Age of Empire
-Fermé Age of Empire
-Mon jeu pb c'est planté sur l'instruction End !.

De là à dire que c'est un bug, je ne sais pas car il ne me viendrait pas à l'idée d'ouvrir deux jeux en même temps.
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%
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan

Message par pat »

Merci falsam pour ta réponse.
Et comme on dit, "Mieux vaut tard que jamais".
En fait ce désagrément que tu as constaté sur la 3D existe donc bien.
Moi qui veut distribuer mes programmes en 3D, ces jeux ne doivent pas avoir de problème.
Et comme c'est dans la possibilité des choses que le multitâche, je ne vois pas pourquoi sur PB cela ne fonctionnerait pas bien.
Tout les langages que j'ai consulté fonctionnent avec le changement de résolution d'écran, sauf PB.
As-tu fais le test sur la 2D ?
Je pense également que je ne me suis pas trompé. Je te propose de faire le test au sujet de la 2D cette fois.
Si tu veux, tu me diras ce qu'il en est de ton côté.
Et pour la 3D, il y a autre chose : les fichiers ne reconnaissent pas les noms avec des accents.
Tu peux aussi faire le test.
Je ne vois pas pourquoi l'instruction IncludePath("----") fonctionne avec les accents et pas les fichiers 3D.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan

Message par Backup »

...
Dernière modification par Backup le mar. 19/août/2014 9:52, modifié 1 fois.
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan

Message par pat »

A Dobro :
Tu ne dois pas être en plein écran mais sur une fenêtre.
Tu ne fermes pas ta fenêtre et tu bascules dans un programme qui a une autre résolution d'écran. Tu rebascules sur ta fenêtre.

En 3D :
1) Tout est normal.
2) Tu fermes ta fenêtre, tu as une erreur sur l'instruction END.

En 2D :
1) Ton écran graphique est fermé et la fenêtre est blanche.
2) Pas besoin de recharger les sprites, ils sont actifs.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [OK] OpenWindowScreen() freeze pendant qu'un jeu est lan

Message par Backup »

pat a écrit :A Dobro :
Tu ne dois pas être en plein écran mais sur une fenêtre.
Tu ne fermes pas ta fenêtre et tu bascules dans un programme qui a une autre résolution d'écran. Tu rebascules sur ta fenêtre.

oui ! ton Erreur elle est là !

il FAUT FERMER LA FENETRE !...enfin l'ecran c'est ce que mon code démontre !

que ce soit en WindowedScreen ou en OpenScreen la gestion est la meme !

tu testes si ton application a le focus , si c'est pas le cas tu Ferme cette Put*** de fenetre (l'ecran)! c'est pas une suggestion c'est un ordre ! :lol:

parce que sinon Directx se retrouve avec 2 ecrans , et la Bug !
c'est pas un probleme de Purebasic , mais un Probleme lié a DirectX (a windows ??? )....

en fermant ton ecran , tu liberes les ressources et Directx peut bosser tranquille
sinon forcement les ressources sont allouées au nouvel ecran ouvert ... et le tiens est dans les Choux

moi dans le code ci dessus, j'utilise un bouton de rappel dans la barre des taches ... pour relancer le beans ! ....

note qu'avec Ar-s (enfin surtout MOA :lol: ) on a récemment fait un code qui détecte le passage en plein ecran ... justement dans le but de Fermer
notre ecran de notre application (une Radio ) ... et de le ré ouvrir lorsqu'on quitte le plein ecran d'un jeux
http://www.purebasic.fr/french/viewtopi ... o&start=45


c'est une autre méthode (automatique) que celle que j'ai posté plus haut )
la technique :
on regarde un ou plusieurs pixel de notre application , pour savoir si elle est recouverte par un ecran ...
si les pixels passent au noir , c'est qu'un Ecran de jeux recouvre notre interface utilisateur ..
donc, on ferme l'ecran graphique de notre application ...

lorsque les couleurs redeviennent les notres ... cela signifie qu'il n'y a plus de plein d'ecran qui recouvre notre appli donc
on reouvre notre ecran
Dernière modification par Backup le mer. 22/janv./2014 13:48, modifié 8 fois.
Répondre