Bonjour à tous,
J'ai mis en pratique mon apprentissage Python en réalisant un petit projet :
un labyrinthe 3D dans lequel on peut se promener et rencontrer d'autres joueurs connectés.
J'utilise OpenGl pour le rendu 3D de mon labyrinthe.
Au cours du jeu , sur l'action de Esc, on arrive sur un menu avec différentes options puis on revient sur le labyrinthe.
Voici mon problème : je suis obligé de faire un pygame.display.quit() et de réinitaliser par pygame.display.set_mode avant de réafficher le labyrinthe ou le menu d'options (sinon le programme se plante).
Le résultat est la disparition de la fenêtre et réaffichage d'une nouvelle fenêtre, ce qui est un peu désagréable.
Avez-vous une solution pour éviter ce switch ?
Je pense que cela vient du paramètrage de pygame.display.set_mode...
Je sais que je ne suis pas très clair alors j'ai créé un petit exemple montrant mon problème : mon écran d'options est représenté par un carré rouge et mon labyrinthe, par une surface 3D.
En appuyant sur le 'c', cela permet de switcher d'un écran à l'autre.
Voici mon code exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import pygame
from pygame.locals import *
from OpenGL.GLU import *
from OpenGL.GL import *
 
class testMode():     
    def __init__(self):
        self.windowWidth=800
        self.windowHeight=600
        self.modeOpenGpl = False
        pygame.init()
        self.withoutOpenGpl()
 
    def withOpenGpl(self):
        pygame.display.quit()
 
        pygame.display.set_mode((self.windowWidth,self.windowHeight), DOUBLEBUF|OPENGL|OPENGLBLIT)
        glMatrixMode(GL_PROJECTION); glLoadIdentity()
        gluPerspective(45, (self.windowWidth/self.windowHeight), 0.1, 200.0)        
        glMatrixMode(GL_MODELVIEW);  glLoadIdentity()
        glScalef(0.01,0.01,0.01)
        gluLookAt(0,0,0, 0,0,-1, 0,1,0)
        glBegin(GL_QUADS)        
        glTexCoord2f(0.0, 0.0); glVertex3f(0.0, -50.0, -1000.0)
        glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -50.0, 100.0)
        glTexCoord2f(1.0, 1.0); glVertex3f(100.0, -50.0, 1000.0)
        glTexCoord2f(0.0, 1.0); glVertex3f(100.0, -50.0, -1000.0)
        glEnd()
        pygame.display.flip()
 
    def withoutOpenGpl(self):
        pygame.display.quit()
 
        self.windowInit = pygame.display.set_mode((self.windowWidth,self.windowHeight))
        carre = pygame.Surface((100,100))
        carre.fill((255,0,0))
        self.windowInit.blit(carre,(10,10))
        pygame.display.flip()
 
tMode = testMode()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit(); import sys; sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:                        
                pygame.quit(); import sys; sys.exit()                
            elif event.key == pygame.K_c:
                tMode.modeOpenGpl = not tMode.modeOpenGpl
                if tMode.modeOpenGpl: tMode.withOpenGpl()
                else: tMode.withoutOpenGpl()
 
    key = pygame.key.get_pressed()
 
pygame.quit()
Toute aide sera la bienvenue !
Merci d'avance.