gpt4 book ai didi

python - pygame key.set_repeat 不工作

转载 作者:行者123 更新时间:2023-11-28 22:53:48 25 4
gpt4 key购买 nike

我是 pygame 的新手,我正在尝试制作 pong 以学习它。我正在尝试进行流畅的控制,以便按住箭​​头可以正常工作,但现在无法正常工作。

import sys, pygame
pygame.init()
size = (500, 350)
screen = pygame.display.set_mode(size)
x = 1
xwid = 75
yhei = 5
pygame.key.set_repeat(0, 500)
while True:
vector = 0
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
vector = 4
elif event.key == pygame.K_LEFT:
vector = -4
pygame.draw.rect(screen,(255,255,255),(x,size[1] - yhei,xwid,yhei),0)
pygame.display.update()
screen.fill((0,0,0))
x += vector
if x <= 0:
x = 0
elif x >= size[0] - xwid:
x = size[0] - xwid

为什么这对按住向左或向右箭头不起作用?

最佳答案

pygame.key.set_repeat(0, 500)

如果将delay 参数设置为0,按键重复将被禁用。 documentation对此不是很清楚:

pygame.key.set_repeat()
control how held keys are repeated
set_repeat() -> None
set_repeat(delay, interval) -> None

When the keyboard repeat is enabled, keys that are held down will generate multiple pygame.KEYDOWN events. The delay is the number of milliseconds before the first repeated pygame.KEYDOWN will be sent. After that another pygame.KEYDOWN will be sent every interval milliseconds. If no arguments are passed the key repeat is disabled.

When pygame is initialized the key repeat is disabled.

强调我的。

您可以将 delay 设置为 1,它会按预期工作:

pygame.key.set_repeat(1, 10) # use 10 as interval to speed things up.

但请注意,您不应使用set_repeatpygame.KEYDOWN 事件来实现移动。如果这样做,您将无法观察到真正的单个击键,因为如果玩家按下一个键,就会创建一大堆 pygame.KEYDOWN 事件。

更好用pygame.key.get_pressed() .看看他的最小示例:

import pygame
pygame.init()
screen = pygame.display.set_mode((680, 460))
clock = pygame.time.Clock()

# use a rect since it will greatly
# simplify movement and drawing
paddle = pygame.Rect((0, 0, 20, 80))

while True:

if pygame.event.get(pygame.QUIT): break
pygame.event.pump()

# move up/down by checking for pressed keys
# and moving the paddle rect in-place
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]: paddle.move_ip(0, -7)
if keys[pygame.K_DOWN]: paddle.move_ip(0, 7)

# ensure the paddle rect does not go out of screen
paddle.clamp_ip(screen.get_rect())

screen.fill((0,0,0))
pygame.draw.rect(screen, (255,255,255), paddle)
pygame.display.flip()

clock.tick(60)

关于python - pygame key.set_repeat 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com