Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame键按住_Python_Python 3.x_Pygame - Fatal编程技术网

Python Pygame键按住

Python Pygame键按住,python,python-3.x,pygame,Python,Python 3.x,Pygame,当我按下导航按钮时,矩形变为3像素。但是,当我按住钥匙时,我怎么能做到这一点呢 while True: pencere = pygame.display.set_mode((800,600)) pygame.display.set_caption("Oyun") for olay in pygame.event.get(): if olay.type == pygame.QUIT: pygame.quit()

当我按下导航按钮时,矩形变为3像素。但是,当我按住钥匙时,我怎么能做到这一点呢

while True:

    pencere = pygame.display.set_mode((800,600))
    pygame.display.set_caption("Oyun")

    for olay in pygame.event.get():
        if olay.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    keys = pygame.key.get_pressed()

    if keys[pygame.K_UP]:
        y -= 3
    if keys[pygame.K_DOWN]:
        y += 3
    if keys[pygame.K_LEFT]:
        x -= 3
    if keys[pygame.K_RIGHT]:
        x += 3

    pencere.fill(beyaz)
    pygame.draw.rect(pencere, mavi, (x, y, 40, 60))
    pygame.display.update()

因此,只有当其中一个导航键按下时,x和y才会更新

while True:

    pencere = pygame.display.set_mode((800,600))
    pygame.display.set_caption("Oyun")

    for olay in pygame.event.get():
        if olay.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    keys = pygame.key.get_pressed()

    if keys[pygame.K_UP]:
        y -= 3
    if keys[pygame.K_DOWN]:
        y += 3
    if keys[pygame.K_LEFT]:
        x -= 3
    if keys[pygame.K_RIGHT]:
        x += 3

    pencere.fill(beyaz)
    pygame.draw.rect(pencere, mavi, (x, y, 40, 60))
    pygame.display.update()


因此,只有当其中一个导航键按下时,x和y才会更新。我在pygame项目中经常使用类似的功能

它的基础是,如果按下某个键,则将变量设置为True;如果松开某个键,则将变量设置为false。调用函数(如
move()
)时,将检查移动变量是否为真

如果同时按下向右和向左箭头,则不会移动

这只是我使用的一些代码。因为您也在使用up和down,所以应该为up和down添加更多的事件检查,代码应该很好用

代码:


我在pygame项目中经常使用类似的功能

它的基础是,如果按下某个键,则将变量设置为True;如果松开某个键,则将变量设置为false。调用函数(如
move()
)时,将检查移动变量是否为真

如果同时按下向右和向左箭头,则不会移动

这只是我使用的一些代码。因为您也在使用up和down,所以应该为up和down添加更多的事件检查,代码应该很好用

代码:



每次使用
set\u模式
循环时,您都会重新初始化pygame窗口。显然,这也会重置键盘输入。(事实上,我很惊讶这不会使整个窗口闪烁或产生其他明显的效果。)你应该只调用
set\u mode
一次,并且应该在主循环之前调用它。

每次使用
set\u mode
循环时,你都要重新初始化pygame窗口。显然,这也会重置键盘输入。(事实上,我很惊讶这不会使整个窗口闪烁或产生其他明显的效果。)您应该只调用
set\u mode
一次,并且应该在主循环之前执行此操作。

x和y在哪里初始化?在你的主循环中还有其他东西吗?
set\u mode
是否在主循环内明确调用?x和y在循环外x和y在哪里初始化?在你的主循环中还有其他东西吗?
set\u mode
是否在主循环内被明确调用?x和y在循环外感谢您的回复,但仍然不起作用,并且比以前慢。您所说的慢是什么意思?我测试过了,效果很好。也许你的问题不够清楚,如果你放慢矩形移动的速度,你可以减少睡眠时间。但是,如果您选择的时间窗口太小,一次按下就会被解释为按住。当我按住键时,矩形只移动一次,我希望它不断移动。您是否将我的代码放入
while
循环中?它应该不断移动。谢谢你的回复,但仍然没有工作,比以前慢。你说的慢是什么意思?我测试过了,效果很好。也许你的问题不够清楚,如果你放慢矩形移动的速度,你可以减少睡眠时间。但是,如果您选择的时间窗口太小,一次按下就会被解释为按住。当我按住键时,矩形只移动一次,我希望它不断移动。您是否将我的代码放入
while
循环中?它应该不停地移动。感谢您的回复,但当我按下导航按钮时,重新调整的角度不会不停地移动。它对我来说很好。请详细说明你所说的恒常是什么意思例如:如果按键[pygame.K_UP]:打印(“你好”)如果我按下按钮,它只打印一次你好。如果我想再打印一次,我需要再按一次。正如我所说,这段代码没有向上或向下键,因为我没有使用它们。添加它们相当简单,因为您只需复制我已经为左侧和右侧写下的函数。按住左键和右键对你有用吗?谢谢你的回答,但当我按住导航按钮时,重新调整的角度并没有一直移动。它对我很有用。请详细说明你所说的恒常是什么意思例如:如果按键[pygame.K_UP]:打印(“你好”)如果我按下按钮,它只打印一次你好。如果我想再打印一次,我需要再按一次。正如我所说,这段代码没有向上或向下键,因为我没有使用它们。添加它们相当简单,因为您只需复制我已经为左侧和右侧写下的函数。保持左右键对你有用吗?我想知道这是否取决于版本或操作系统,OP的代码在PyGame 1.9.6/Python3.8.2/Linux中对我有用。没有闪烁,盒子可以移动。我在Windows上复制了它。我真的很惊讶——我根本没想到它会重演。我想这在很大程度上取决于操作系统特定的窗口系统以及pygame和SDL如何与它们集成的细节。我想知道这是版本还是操作系统相关的,OP的代码在pygame 1.9.6/Python 3.8.2/Linux中适用于我。没有闪烁,盒子可以移动。我在Windows上复制了它。我真的很惊讶——我根本没想到它会重演。我想这在很大程度上取决于操作系统特定的窗口系统以及pygame和SDL如何与之集成的细节。
running = True
directions = {"right": False, "left": False}
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                directions['right'] = True
            elif event.key == pygame.K_LEFT:
                directions['left'] = True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                directions['right'] = False
            elif event.key == pygame.K_LEFT:
                directions['left'] = False
    if directions['right']:
        x += 3
    if directions['left']:
        x -= 3