2017-03-13 2 views
1

Je veux pouvoir maintenir la touche enfoncée et bouger mon petit noir dot, puis relâchez la touche et arrêtez-la. Cependant, même si je maintiens la touche enfoncée, la commande if de la touche est en cours d'exécution. Voici mon codeJ'utilise pygame en python et je veux maintenir un bouton pour un mouvement constant, mais KEYUP lit vrai même si je ne lève pas la clé

manmovemaster = 0 
l = 1 
f1 = 0 
from random import randint 
from math import sin, cos, tan, pi 
import pygame 
from pygame.locals import* 
Fps = pygame.time.Clock() 
#starting variables 
sw = 1200 
sh = 650 
r = 250 
g = 250 
b = 250 
framerate = 40 


#beginning of a man 
man1x = 650 
man1y = 50 
mancolor=(0,0,0) 
manlocation = (man1x, man1y) 
Diamaterofhead = (5) 
man1ymovedown = 0 
man1ymoveup = False 
man1xmoveright = False 
man1xmoveleft = False 


#game logic 
while l: 
    pygame.init() 
    screen = pygame.display.set_mode((sw,sh)) 
    pygame.display.set_caption("WGD THE GAME") 
    background = pygame.Surface(screen.get_size()) 
    background = background.convert() 
    background.fill((r,g,b)) 



    man1 = pygame.draw.circle(background,mancolor,(man1x,man1y),Diamaterofhead) 
    if man1ymovedown== True: 
     man1y += 1 
     manmovemaster = 0 

    if man1ymoveup == True: 
     man1y -= 1 

    if man1xmoveright == True: 
     man1x +=1 

    if man1xmoveleft == True: 
     man1x -=1 



#screen refresh 

    for event in pygame.event.get(): 
     if event.type ==pygame.QUIT: 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       man1xmoveleft = True 
      if event.key == pygame.K_RIGHT: 
       man1xmoveright = True 
      if event.key == pygame.K_UP: 
       man1ymoveup = True 
      if event.key == pygame.K_DOWN: 
       man1ymovedown = True 
     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT: 
       man1xmoveleft = False 
      if event.key == pygame.K_RIGHT: 
       man1xmoveright = False 
      if event.key == pygame.K_UP: 
       man1ymoveup = False 
      if event.key == pygame.K_DOWN: 
       man1ymovedown = False 

    else: 
     screen.blit(background, (0,0)) 
     pygame.display.flip() 
     pygame.time.get_ticks 
     Fps.tick(framerate) 
+0

Vous pouvez également déplacer en fonction de '(vitesse * timedelta depuis la dernière boucle d'événement)' et mouvement constant. Avec un '1' statique, votre' man1' se déplacera plus rapidement sur des fréquences d'images plus rapides et plus lent sur des fréquences d'images plus lentes et toutes les images ne sont pas égales. – cmd

Répondre

1

Utilisez ce lieu:

import pygame 
import sys 

pygame.init() 
screen = pygame.display.set_mode((400,400)) 
pygame.display.set_caption("WGD THE GAME") 

Fps = pygame.time.Clock() 

man1x = 200 
man1y = 200 

while True: 
    screen.fill((0, 0, 0)) 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 

    pygame.draw.circle(screen,(255, 255, 255),(man1x,man1y), 25) 

    pressed = pygame.key.get_pressed() 
    if pressed[pygame.K_LEFT]: 
     man1x -= 1 
    if pressed[pygame.K_RIGHT]: 
     man1x += 1 
    if pressed[pygame.K_UP]: 
     man1y -= 1 
    if pressed[pygame.K_DOWN]: 
     man1y += 1 

    pygame.display.flip() 
    Fps.tick(60) 

utilisant pygame.key.get_pressed() au lieu de pygame.event.get() retourne l'état des clés à tout moment, et non juste quand vous appuyez dessus. Donc, vous pouvez maintenir une touche enfoncée et ça le fera, et quand vous le relâcherez, ça s'arrêtera. Cela fonctionnera également pour le mouvement diagonal. car il vérifie l'état de toutes les clés, il vérifie et quitte donc les deux seront vraies (pressées) et le personnage se déplacera en diagonale.

https://www.pygame.org/docs/ref/key.html#pygame.key.get_pressed

et vous pouvez prendre tout l'événement vérification et drapeaux du mouvement booléennes out. De plus, à chaque fois que vous parcourez la boucle, vous appelez pygame.init(). Ce n'est pas nécessaire. Vous n'avez pas non plus besoin de définir le mode à chaque fois via la boucle du jeu, ainsi que la légende et l'arrière-plan.

+0

Est-ce que je crée une autre boucle? , et si oui, cela ressemblerait-il à "for pressé dans pygame.key.get_pressed():"? – Christopher

+0

non, pygame.key.get_pressed() retourne un tableau des états de toutes les clés. Je vais mettre à jour mon code. – The4thIceman

+0

C'est pourquoi cela me rend fou, je vais répondre à ma question avec le code que j'ai réécrit, il ne bouge toujours que lorsque j'appuie sur la touche, il ne bouge pas quand je maintiens la touche enfoncée. J'apprécie votre aide et votre patience. – Christopher