【问题标题】:Trouble with key handling and boundary collision in pygamepygame中的键处理和边界冲突问题
【发布时间】:2017-04-12 13:48:29
【问题描述】:

所以,首先我在碰撞处理方面遇到了麻烦。基本上我有这个代码:

      x_move = 0
      player_width = 115

   ...


        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a:
                x_move -= 6
            if event.key == pygame.K_d:
                x_move += 6
                print(x_move)
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_a or event.key == pygame.K_d:
                x_move = 0


    if x > display_width - player_width:
        x_move -= 1
    if x < 0:
        x_move += 1

    x += x_move

显然,当玩家按下“A”时,他们会向左走,当他们按下“D”时,他们会向右走。现在边界碰撞非常便宜,我从一开始就知道这一点。

我的想法是检测玩家进入的帧,如果该帧(或之后的帧)在屏幕外,减去精灵的宽度(这样一半的玩家不会在屏幕外 - 这是一艘宇宙飞船) ,然后拒绝玩家继续前进。

现在,这个的其他实现实际上阻止了玩家继续前进,但是如果他们继续点击 A 或 D,他们会逐帧移出屏幕。

然而,目前,当它们撞到边缘时,它们实际上会反弹并反转方向,如果它们在正确的时间撞到相反的方向,它们会增加速度并加快速度。

第二个问题是 - 除非他们完全释放一个密钥 - 他们不能使用另一个密钥。它可以防止他们去任何地方。

谁能帮助我了解幕后发生的事情?这两个问题一直是我的眼中钉。

【问题讨论】:

    标签: python python-2.7 pygame


    【解决方案1】:

    对于“他们不断点击 A 或 D,他们会逐帧移出屏幕” 你只需要改变你的代码:

    if x > display_width - player_width + x_move:
        x_move = 0
    if x - x_move < 0:
        x_move = 0
    

    如果你不明白为什么,我可以解释,但我认为这很容易理解......

    但是,我不明白“他们不能使用另一个键”,你在想什么?

    【讨论】:

    • 使用此代码时,玩家会被冻结在边缘。
    • 例如,当玩家向左走 (K_a) 时,他们必须在向右走之前完全释放 K_a 键。通常,游戏允许一个覆盖另一个以支持最近按下的一个。以这种方式拥有它是非常不切实际的,所以我希望能够用任何按下的键覆盖键。
    • 所以你想让玩家在边缘反弹?您可以创建一个变量来计算按下了多少键
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多