Partage
  • Partager sur Facebook
  • Partager sur Twitter

KEYDOWN ne marche pas

    14 novembre 2014 à 16:02:17

    Bonjour !

    Je viens de débuter le tuto sur pygame et j'ai un petit problème avec le déplacement d'une image. lorsque j'appuie sur la flèche, rien ne se passe. Pourtant j'ai regarder la correction et j'ai fait de même. toujours rien. Du coup j'ai vérifier si KEYDOWN marchait avec un code tout simple :

    import pygame,sys
    from pygame.locals import *
    
    
    fenetre=pygame.display.set_mode((600,600,))
    GAME = True
    while GAME :
          for event in pygame.event.get() :
             if event.type == KEYDOWN :
                if event.type == K_q:
                   pygame.quit()
                   sys.exit()

    et ça ne marche toujours pas. Pourtant il ne m'indique aucune erreur du genre "emplacement non trouver".

    • Partager sur Facebook
    • Partager sur Twitter
      14 novembre 2014 à 17:19:18

      Salut,

      As-tu rafraîchit ton écran (avec blit() je crois)? À chaque changement il faut rafraichir l'image, c'est-à-dire recopier & le fond & l'image par dessus

      • Partager sur Facebook
      • Partager sur Twitter
      Précepte: Le mieux est l'ennemi du bien
      Anonyme
        14 novembre 2014 à 17:52:38

        hey ! tu te trompes tu met event.type == K_q au lieu de event.key == K_q !! attention :D
        • Partager sur Facebook
        • Partager sur Twitter
          14 novembre 2014 à 19:55:04

          oui j'ai bien rafraichit l'écran !

          ah ouais mais ça c'est quand j'ai recopier le code sur le forum ^^ attend, je vais faire un copier coller de mon vrai code ce sera mieux :

          import pygame,sys
          from pygame.locals import * ##importe les constante de pygame
          pygame.init()
          pygame.font.init()
          
          score= 0
          
          #fenêtre de jeu
          fenetre=pygame.display.set_mode((600,600,))
          pygame.display.set_caption("Shingeki no Yunikon")
          #background :
          fond = pygame.image.load ("BGround.jpg").convert()
          fenetre.blit(fond, (0,0)) ##renvoie l'image à la couche du fond (car empilement des images)
          #perso:
          perso=pygame.image.load("perso.PNG").convert_alpha()
          position_perso = perso.get_rect()
          fenetre.blit(perso, position_perso)
          pygame.display.flip() ##MAJ de la fenêtre
          
          #Boucle du GAME :
          pygame.time.Clock().tick(30) ##Limitation de vitesse de la boucle
          #------quitter la fenêtre-----------
          GAME = True
          while GAME:
              for event in pygame.event.get() :
                  if event.type == QUIT: ##event.type pour déterminer quel type d'evenement c'est parmis la liste de pygame
                      pygame.quit()
                      sys.exit()
          #--------déplacement joueur----------
                  if event.type == KEYDOWN:
                      if event.key == K_DOWN:
                           position_perso.move(0,100)
                           
              fenetre.blit(fond, (0,0)) ##Re-collage du fond pour recouvrir la fenêtre et repartir à zéro
              fenetre.blit(perso, position_perso) ##Collage du personnage à sa nouvelle position
              pygame.display.flip() ##Rafraîchissement de l'écran
          



          -
          Edité par AikaFuwa_ 14 novembre 2014 à 19:57:09

          • Partager sur Facebook
          • Partager sur Twitter
            14 novembre 2014 à 19:58:10

            et ça ne marche toujours pas :(

            -
            Edité par AikaFuwa_ 14 novembre 2014 à 19:59:10

            • Partager sur Facebook
            • Partager sur Twitter
              14 novembre 2014 à 19:59:01

              position_perso = position_perso.move(0, 100)
              #ou bien
              position_perso.move_ip(0, 100) #en théorie ça marche, mais je n'ai jamais testé

              Ligne 32 ;)
              • Partager sur Facebook
              • Partager sur Twitter
                14 novembre 2014 à 20:02:13

                Si ça marche le move_ip(), et tu l'a bien utilisé (et bien compris):D. C'est celui que j'utilisais quand j'ai fait un peu de pygame ;)

                -
                Edité par Olygrim 14 novembre 2014 à 20:02:49

                • Partager sur Facebook
                • Partager sur Twitter
                Précepte: Le mieux est l'ennemi du bien
                  14 novembre 2014 à 20:06:36

                  oooooh !! merci infiniment ! Mais quel est la différence entre .move() et .move_ip() ? en tout cas avec le premier ça ne marchait pas
                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 novembre 2014 à 20:09:21

                    Cf la doc (un réflexe utile à avoir en toutes circonstances quand on ne comprend pas quelque chose ;) )

                    En fait move() renvoie un nouveau Rect() avec les position décalées, alors que move_ip() travaille sur l'objet lui-même. 

                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 novembre 2014 à 20:10:51

                      merci pour le lien ! Je comprend mieux.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      KEYDOWN ne marche pas

                      × 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