如何在 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()
我目前正在制作格斗游戏,想知道如何添加命令输入。我知道这有点无关紧要,很多替代品都是可能的,但使用熟悉的格斗游戏输入会很好。
我目前有这样的东西:
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()