Pygame键按住

2024-05-18 16:16:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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()

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


Tags: intrueforgetifmodedisplaykeys
3条回答

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

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

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

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

代码:

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

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

你能行

import time

key_1 = pygame.key.get_pressed()
time.sleep(0.5)
key_2 = pygame.key.get_pressed()

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

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

相关问题 更多 >

    热门问题