Problème d'affichage du menu sur pygame

marinside Messages postés 9 Statut Membre -  
 bhof -
Bonjour je suis en isn et lorsque que j'essaye de lancer le programme du menu
cela ne marche pas, ecran noir... comment faire ?

ecran = pygame.display.set_mode((700,700)).convert()
fond = pygame.image.load("newyork.jpg")
fond.blit(fond,(0,0))
pygame.display.flip() #pour que les instrcutions soient appliquées

clock = pygame.time.Clock()

def menu():
intro = True
while intro:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
ecran = pygame.display.set_mode((700,700)).convert()
fond = pygame.image.load("newyork.jpg")
fond.blit(fond,(0,0))
pygame.display.update() #pour que les instrcutions soient appliquées
if event.type == KEYDOWN:
if event.key == K_RETURN: #jeu
mode=2
if event.type ==K_SPACE:
instructions=pygame.image.load("loris.jpg").convert() #toujours pas mais a faire info et regles
fenetre.blit(instructions,(0,0))
pygame.display.update()

menu()

1 réponse

  1. bhof
     
    Bonjour.

    Beaucoup de problèmes dans ton code.
    - pygame.display.set_mode ne doit être déclaré qu'une seule fois.
    - pygame.display.update() ne doit être appelé qu'une seule fois (c'est une opération très coûteuse).
    - Les chargements d'images (pygame.image.load) ne doivent JAMAIS être effectués dans une boucle, le chargement d'une image est une opération lente et coûteuse car accès disque, il faut charger les images une unique fois au début du script.
    - Il faut revoir ce que doivent être les paramètres du blit.

    Voici à peu près comment devrait être organisé ton code (j'ai essayé d'indenter ton code par déduction...).

    ecran = pygame.display.set_mode((700,700)).convert()
    fond = pygame.image.load("newyork.jpg")
    instructions = pygame.image.load("loris.jpg").convert()
    fond.blit(fond, (0,0))
    pygame.display.flip() #pour que les instrcutions soient appliquées
    
    clock = pygame.time.Clock() # NE SERT PAS...
    
    def menu():
        intro = True
        while intro:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    # pygame.quit()
                    # quit() # KÉSAKO ?
                    return
                    # ecran = pygame.display.set_mode((700,700)).convert() # NON
                    # fond = pygame.image.load("newyork.jpg") # NON
                    # fond.blit(fond, (0,0)) # PAS ICI
                    # pygame.display.update() #pour que les instrcutions soient appliquées # NON
                elif event.type == KEYDOWN: # ON UTILISE UN ELIF
                    if event.key == K_RETURN: #jeu
                        mode=2 # KÉSAKO ?
                        img = fond  # AUCUNE IDÉE SI CELA DOIT ÊTRE ÇA DANS TON CODE
                elif event.type == K_SPACE:
                    # instructions=pygame.image.load("loris.jpg").convert() #toujours pas mais a faire info et regles # NON
                    img = instructions
            # fenetre.blit(instructions,(0,0)) # D'OÙ SORT FENETRE ?
            ecran.blit(img, (0, 0))
            pygame.display.update()
    
    
    menu()
    pygame.quit()
    0