【问题标题】:Pygame event module vs key module for player movement [duplicate]Pygame事件模块与玩家移动的关键模块[重复]
【发布时间】:2020-12-11 17:46:41
【问题描述】:

我的目标是在一个键盘上玩 2 人 pygame,每个玩家都可以上下左右移动。

我想知道最好只使用事件模块还是同时使用关键模块。 我见过的大多数示例只使用 key 模块,如下所示:

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            x_change = -5
        elif event.key == pygame.K_RIGHT:
            x_change = 5
    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            x_change = 0
x += x_change

这样的问题:当同时按下左键和右键然后抬起一个键时,x_change设置为零。

我尝试使用跟踪按下多少键的变量来解决此问题,但没有成功。所以我想知道上述方法是否不是正确的方法。我希望 pygame.key 模块能解决我的问题,但在理解文档时遇到问题。

这里有 pygame 经验的人可以推荐何时使用哪个模块?

【问题讨论】:

    标签: python events pygame key


    【解决方案1】:

    键盘事件(参见pygame.event 模块)仅在按键状态更改时发生一次。每次按下某个键时,KEYDOWN 事件就会发生一次。每次释放键时,KEYUP 发生一次。将键盘事件用于单个操作或逐步移动。

    pygame.key.get_pressed() 返回一个包含每个键状态的列表。如果按住某个键,则该键的状态为True,否则为False。使用pygame.key.get_pressed() 评估按钮的当前状态并获得连续移动:

    speed = 5
    run = True
    while run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
    
        keys = pygame.key.get_pressed()
        x += (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * speed
        y += (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * speed
    
        # [...]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多