Partage
  • Partager sur Facebook
  • Partager sur Twitter

Menu d'un jeu

Problème

    23 mai 2018 à 13:41:59

    Bonjour !

    je viens demander de l'aide ici car je ne trouve pas la solution à mon problème

    En effet, je souhaite fabriquer un "Menu" d'un jeu dont la seule tâche est de montrer le titre du jeu avec écris "appuyer sur Espace pour jouer" (le tout avec pygames)

    Voici le code :

    import pygame
    import tkinter
    from pygame.locals import*
    from tkinter import*
    
    
    pygame.init()
    fen = pygame.display.set_mode((0,0),FULLSCREEN)
    fond = pygame.image.load("Menu.png").convert()
    fen.blit(fond, (0,0))
    pygame.display.flip()
    
    jeux = False
    
    
    
    while not jeux:
        for event in pygame.event.get():
            if event.type == K_SPACE:
                jeux = True
                fond.blit(fond, (0,0))
                fond.fill(0)
    
    
    
    pygame.display.flip()
    

    Ce que je ne comprend pas, c'est que ici, l'écran devrais devenir tout noir quand on appuie sur espace mais il ne se passe juste rien...

    Je suis bloquer dessus depuis quelque temps, peut-on m'aider ? :(

    Merci beaucoup

    -
    Edité par HugoHamon1 23 mai 2018 à 13:42:48

    • Partager sur Facebook
    • Partager sur Twitter
      23 mai 2018 à 14:04:04

      Tu peux m'expliquer ta ligne 21?

      Tu es sur que c'est pas fen.blit().

      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2018 à 14:07:20

        j'ai mis fond car la fenètre utilise comme fond une image et je veux juste que tout devienne noir, avec le fond.blit(fond, (0,0)) je demande normalement que la couleur du fond devienne noir
        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2018 à 14:22:34

          Mais ce que tu veux remplir de noir c'est la fenetre pas l'image

          • Partager sur Facebook
          • Partager sur Twitter
            23 mai 2018 à 14:41:12

            Oui en sois, après je viens d'essayer avec fen.blit() et j'ai le même résultat
            • Partager sur Facebook
            • Partager sur Twitter
              27 mai 2018 à 13:22:15

              Personne ici ne peut m'aider ? Vraiment ?

              • Partager sur Facebook
              • Partager sur Twitter
                27 mai 2018 à 15:56:45

                Salut,

                Ce n'est pas comme cela que pygame fonctionne.

                Premièrement, les lignes #10 et #11 sont inutiles. Puisque tout ce qui est en rapport avec l'affichage se fait dans la boucle WHILE.

                Deuxièmement, comme dit thetui, c'est la fenêtre qui affiche, pas l'image de fond. Donc, tout ce qui concernant l'affiche doit être avec fen pas fond.

                Troisièmement, vous devriez utiliser des variables, pour afficher ce que vous voulez, lorsque la touche est appuyer. Puisque si vous mettez tout cela dans la boucle d'événements (la boucle FOR), l'affichage se fera uniquement lorsque vous laisserez votre doigt sur la touche. c'est sûrement pas ce que vous voulez.

                Quatrièmement, le rafraîchissement se fait dans la boucle WHILE. Donc, le pygame.display.flip() doit être dans la boucle WHILE. Pas après celle-ci, ni avant...

                Cinquièmement, la boucle FOR d'événement possède deux choses importantes.

                • Le event.type, qui demande qu'elle type de touche (QUIT, KEYDOWN, KEYUP, MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN, ...) Voici le lien
                • Le event.key, qui demande qu'elle touche est appuyée. (K_SPACE, K_ESCAPE, K_w, K_UP, ...) Voici le lien

                Voici un exemple, complet:

                import pygame
                from pygame.locals import*
                 
                pygame.init()
                
                fen = pygame.display.set_mode((0,0),FULLSCREEN)
                fond = pygame.image.load("Menu.png").convert()
                
                continuer = True ## Tout le programme pygame
                menu = True ## Variable du menu
                jeux = False ## Variable du jeu
                
                while continuer:
                    for event in pygame.event.get():
                        if event.type == QUIT: ## Lorsqu'on appuyer sur le X (de la fenêtre)
                            continuer = False
                
                        if event.type == KEYDOWN: ## Le type de touche
                            if event.key == K_SPACE: ## La touche
                                jeux = True
                                menu = False
                
                    if menu:
                        fen.blit(fond, (0,0))
                    if jeux:
                        fen.fill( (0,0,0) )
                
                    ## Rafraîchissement, dans la boucle..
                    pygame.display.flip()
                
                pygame.quit() ## Ferme tout, lorsque la boucle est arrêté

                J'espère que vous prendrez le temps de comprendre. C'est la base de pygame.

                Si vous mettez ceci:

                        if event.type == KEYDOWN:
                            if event.key == K_SPACE:
                                fen.blit(...)
                                fen.fill(...)
                
                

                N'oubliez pas que vous êtes dans une boucle WHILE, donc, l'affichage se fait à chaque itération de la boucle.

                Vous aller afficher, SEULEMENT, lorsque vous appuierez sur la touche espace... Ce qui n'est pas correct. Puisqu'il n'y a pas de keyrepeat. (Une autre sujet) Donc, vous devrez (maintenir/appuyer plusieurs fois) la touche, pour afficher.

                N'hésitez pas pour les questions.
                Bonne chance

                A+

                -
                Edité par nolimitech 27 mai 2018 à 16:00:36

                • Partager sur Facebook
                • Partager sur Twitter

                Menu d'un jeu

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown