Je fais un petit jeu et je veux faire une autre fenêtre séparément de mon principal.
J'ai le jeu principal dans une fenêtre principale et je veux ouvrir une nouvelle fenêtre et faire une petite animation Lorsque l'utilisateur fait quelque chose. p>
dans mon code d'exemple ci-dessous, lorsque l'utilisateur appuie sur "A", je souhaite qu'il ouvre une nouvelle fenêtre et blit à là. P>
Ici, j'ai mis en place Les deux fenêtres: (Je sais que cela ne fonctionne pas, c'est ce que je demande comment faire) p> puis le programme: p> Jusqu'à présent, ce que cela fait, c'est dessine l'écran principal, puis lorsqu'il est enfoncé, il arrête de dessiner les animations de l'écran principal, mais dessine toujours les autres animations de l'écran principal et dessine dans le coin supérieur gauche. < / p> Je suis sûr que cela fait cela parce que je suis défini Cependant, je veux Comment faire cela? Est-ce même possible? P> p> Battle_scene CODE> pour être plus petit que l'écran principal, donc lors de la blâgeur
Battle_scene CODE> zone que j'ai créée (240x160) dans le coin supérieur de l'écran principal. P>
bataille_scene code> être un séper Mangé la fenêtre, de sorte que lorsque j'appuie «A», il apparaîtra, faites-le, puis fermez-vous ou au moins aller derrière l'écran principal. P>
3 Réponses :
Avez-vous vraiment besoin de plusieurs fenêtres? Je veux dire, avez-vous vraiment besoin d'eux?
Si oui, vous devriez probablement utiliser pyglet / cocos2d à la place. p>
Pour avoir plusieurs fenêtres dans PYGAME, vous avez besoin de plusieurs processus (un pour chaque fenêtre). Bien que cela soit faisable, cela ne vaut pas la peine d'Efford. Vous aurez besoin IPC pour échanger des données entre les fenêtres et je suppose que votre code deviendra Erreur-ornée et laid. P>
aller avec pyglet lorsque vous avez besoin de plus d'une fenêtre. p>
La meilleure solution est probablement de diviser votre jeu en scènes. Créer plusieurs scènes de manière à ce que chacun représente une étape de la partie, quelque chose comme Menuscene, Mainscene, Battlescene, Gameoverscène, OptionScene, etc. P>
Laissez chacune de ces scènes gérer l'entrée / le dessin de cette partie de la Jeu. P>
run_ani code> li>
ul> Dans votre Mainloop, passez simplement le contrôle sur la scène actuelle en implémentant les méthodes Draw () code>, manipul_event () code>, et mise à jour () code>. p> Quelque code d'exemple pour obtenir l'idée: p> xxx pré> C'est un moyen facile de séparer de manière proprement la logique de jeu et de permettre commutation de contexte. p> p>
Oh je vois, utilisez des classes. Je n'ai jamais aimé les cours parce qu'ils avaient l'air si déroutant, mais je comprends ce que vous avez écrit là-bas. Je pense que je vais même regarder dans des cours de plus et apprendre plus de choses. Pour l'instant, je vous prends de réponse, cela semble être un moyen simple et efficace de faire ce que je veux, merci beaucoup! :)
C'est une idée intelligente, partageant votre connaissance de telles choses. J'aime apprendre tout ce genre de choses, son intéressant et le plaisir en même temps.
====================================== Modifier ======== ================================= p>
En fait, il ne fonctionnera pas. Apperantly pygame ne supporte qu'un seul écran d'affichage, et lorsque vous initialisez une autre, il fermera le premier. Vous séjournerez avec deux varibles, qui sont en fait la même surface. Vous pouvez avoir le jeu à la place de plus en plus la taille de la fenêtre et de jouer la scène de bataille sur le côté de celui-ci, pour ce faire, vous pouvez appeler à nouveau la pygame.display.set_mode () avec des valeurs différentes. Le varible qui fait référence à l'écran d'affichage sera toujours utilisable, car il changer sa référence à la nouvelle. Après la scène est terminée, vous pouvez réduire la fenêtre arrière de la même manière. P>
=============================================== =================================== p>
Qu'est-ce qui se passe essentiellement est que vous exécutez une boucle, et chaque itération de celui-ci est rendu et l'affichage d'un nouveau cadre. Lorsque vous appelez une fonction dans une boucle, il ne continue pas à courir jusqu'à ce que vous avez fini d'exécuter la fonction. P>
Une façon de résoudre ce problen est juste garder d'appeler la fonction qui met à jour la scène de bataille dans la boucle principale. Une autre façon est à l'aide d'un filetage. Threading est essentiellement exécute plusieurs scripts ( "threads") dans le même temps. P>
Heureusement, python déjà mis en oeuvre pour nous avec le module de filetage. Il est trop long pour moi d'expliquer le module, mais vous pouvez l'apprendre . Il est peut-être un peu complexe si vous ne l'avez pas utiliser les threads avant, mais après un certain temps, il sera plus facile. Et si vous voulez en savoir plus sur vous enfiler pouvez aller . P >
Specificly ici, vous pouvez avoir deux fils, un pour chaque boucle / fenêtre, et de les exécuter en même temps. P>
Hope je vous ai aidé! P>
Oui, c'est possible. SDL2 est capable d'ouvrir plusieurs fenêtres. Dans le dossier d'exemple, vous pouvez regarder "Video.py". P>
https://github.com/pygame/pygame/blob /main/examples/video.py p>
"Cet exemple nécessite PYGAME 2 et SDL2. _SDL2 est expérimental et changera." P>
Cela signifie-t-il qu'il y a une façon de le faire? Un peu plus expliquer serait bien :)
Faites une zone dans la fenêtre existante pour les animations.
Donc, fondamentalement, ce que j'ai déjà? Il n'y a pas d'aller plus loin que cela, que vous sachiez?