我想按住一个按钮以便不断移动,但即使我没有抬起钥匙,KEYUP仍然是正确的

时间:2017-03-13 19:42:13

标签: python animation pygame

我希望能够按住键并移动我的小黑点,然后释放键并让它停止。但是,即使我按住键,我的if语句也会被执行。这是我的代码:

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)

1 个答案:

答案 0 :(得分:1)

请改用:

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)

使用pygame.key.get_pressed()而不是pygame.event.get()始终返回键的状态,而不仅仅是按下它时。所以你可以按住一个键,然后当你释放它时,它就会停止。这也适用于对角线运动。因为它会检查所有键的状态,它会检查并离开,这样两者都将为真(按下),并且角色将沿对角线方向移动。

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

然后你可以把所有的事件检查和布尔运动标志拿出来。此外,每次循环调用pygame.init()。这不是必需的。你也不需要每次都通过游戏循环设置模式,以及标题和背景