我是 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 对此不太清楚:强调我的。
您可以将
delay
设置为 1
,它会按预期工作:pygame.key.set_repeat(1, 10) # use 10 as interval to speed things up.
但请注意,您不应使用
set_repeat
和 pygame.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/