Python pygame key.set\u重复不工作

Python pygame key.set\u重复不工作,python,pygame,Python,Pygame,我是pygame的新手,我正在尝试制作乒乓球以学习它。我正试图使控制平滑,以便按下箭头将工作,但它现在不工作 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

我是pygame的新手,我正在尝试制作乒乓球以学习它。我正试图使控制平滑,以便按下箭头将工作,但它现在不工作

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
pygame.init()
大小=(500350)
screen=pygame.display.set_模式(大小)
x=1
xwid=75
yhei=5
pygame.key.set_重复(0500)
尽管如此:
向量=0
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:sys.exit()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_RIGHT:
向量=4
elif event.key==pygame.K_左:
向量=-4
pygame.draw.rect(屏幕,(255255255),(x,大小[1]-yhei,xwid,yhei),0)
pygame.display.update()
屏幕填充((0,0,0))
x+=向量
如果x=大小[0]-xwid:
x=尺寸[0]-xwid

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

我知道你的意思。试试这个:

import sys, pygame
from pygame.locals import *

pygame.init()
size = (500, 350)
screen = pygame.display.set_mode(size)
x = 1
xwid = 75
yhei = 5

clock = pygame.time.Clock()
while True:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    key_pressed = pygame.key.get_pressed()
    if key_pressed[K_LEFT]:
        x -= 4
        if x <= 0:
            x = 0
    if key_pressed[K_RIGHT]:
        x += 4
        if x >= size[0] - xwid:
            x = size[0] - xwid

    pygame.draw.rect(screen,(255,255,255),(x,size[1] - yhei,xwid,yhei),0)
    pygame.display.update()
    screen.fill((0,0,0))
导入系统,pygame
从pygame.locals导入*
pygame.init()
大小=(500350)
screen=pygame.display.set_模式(大小)
x=1
xwid=75
yhei=5
clock=pygame.time.clock()
尽管如此:
时钟滴答(60)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
sys.exit()
按键=pygame.key.get_pressed()
如果按[左]键:
x-=4
如果x=大小[0]-xwid:
x=尺寸[0]-xwid
pygame.draw.rect(屏幕,(255255255),(x,大小[1]-yhei,xwid,yhei),0)
pygame.display.update()
屏幕填充((0,0,0))
如果将
delay
参数设置为
0
,则按键重复将被禁用。政府对此并不十分清楚:

pygame.key.set\u repeat()
控制保持键的重复方式
set\u repeat()->None

set\u repeat(延迟、间隔)->None

启用键盘重复时,按下的键将生成 多个pygame.KEYDOWN事件。延迟是指 将发送第一次重复的pygame.KEYDOWN之前的毫秒。 之后,每隔一段时间将发送另一个pygame.KEYDOWN 毫秒如果未传递任何参数,则禁用键重复。

当pygame初始化时,密钥重复被禁用

我的

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

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

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

更好地使用。看一看他的小例子:

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)
试试看

  pygame.key.set_repeat(1,500)

你想做什么?如果你想更多地了解pygame,我建议你做一些小游戏。这里有一个很好的例子:如果你看代码,一切都很好。它在按下时移动,不起作用的是重复,这就是我的全部asking@KillConsole:您链接中的示例不包括我试图用
设置\u repeat
  pygame.key.set_repeat(1,500)