python - 我想按住按钮持续移动,但即使我不抬起按键,KEYUP 的读数也是 true

标签 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)

最佳答案

改用这个:

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

然后您可以取出所有事件检查和 bool 移动标志。另外,每次循环时都会调用 pygame.init()。这是没有必要的。您也不需要每次通过游戏循环设置模式以及标题和背景

关于python - 我想按住按钮持续移动,但即使我不抬起按键,KEYUP 的读数也是 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42772110/

相关文章:

python-3.x - 为什么生成的 SVG 图像不如相应的 PNG 图像丰富

python - 如何将整数列表加入一个整数python

ios - 快速添加动画序列

python - TypeError from use of "|"in re.search ("RE"|"RE"|"RE", string)

python - 是否可以在 matplotlib 中的动画过程中改变速度

android - JellyBean(> Android 5.x)后的对象动画师在节电模式下不工作

python - 需要 Pygame 帮助

python - pygame 对象不会移动

Python 在找到特定行后读取行

python - View 和 urlpattern : problems with import?