如何在 PyGame 中进行格斗游戏命令输入

How to make fighting game command inputs in PyGame

我目前正在制作格斗游戏,想知道如何添加命令输入。我知道这有点无关紧要,很多替代品都是可能的,但使用熟悉的格斗游戏输入会很好。

我目前有这样的东西:

        keys = pygame.key.get_pressed()
        if keys[pygame.K_DOWN]:
            commandcount +=1
            if commandcount > 0 and commandcount < 30 and keys[pygame.K_RIGHT] and keys[pygame.K_z]:               
                player1.projectile = True

“commandcount”有助于将 window 操作保持在特定时间之前可用。

这样做的主要问题是您仍然可以按任何顺序按下输入,弹丸仍然会出来。

谢谢

尝试使用 pygame.KEYDOWN 事件而不是 pygame.key.get_pressed() 以便观察顺序。使用列表来跟踪这些 KEYDOWN 事件的顺序。当订单匹配特定组合时,然后执行移动并重置列表。该列表也会在一定时间后使用组合重置。我做了一个示例程序,其中组合向下,右,z 激活火球。

import pygame

# pygame setup
pygame.init()

# Open a window on the screen
width, height = 600, 600
screen = pygame.display.set_mode((width, height))


def main():
    clock = pygame.time.Clock()
    black = (0, 0, 0)
    move_combo = []
    frames_without_combo = 0

    while True:
        clock.tick(30)  # number of loops per second
        frames_without_combo += 1

        if frames_without_combo > 30 or len(move_combo) > 2:
            print("COMBO RESET")
            frames_without_combo = 0
            move_combo = []

        screen.fill(black)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                move_combo.append(event.key)  # Only keys for combos should be added

        if move_combo == [pygame.K_DOWN, pygame.K_RIGHT, pygame.K_z]:
            print("FIRE BALL")
            frames_without_combo = 0
        print(move_combo)
        pygame.display.update()


main()