【问题标题】:Pygame: How to ignore collisionsPygame:如何忽略碰撞
【发布时间】:2013-05-22 10:41:13
【问题描述】:

好的,我正在使用 pygame 制作 2D 滚动游戏,但希望能够控制何时考虑碰撞。例如,在我的玩家碰撞并死亡后,他会立即在屏幕中间重生,问题是附近经常有另一个碰撞对象会立即杀死玩家。我想要的是一小段时间,在这段时间内,玩家不会受到碰撞的影响,允许它首先移动到安全的地方,然后继续正常播放广告。我在想也许将重生放在一个虚拟精灵组中,然后随着时间的推移将其移除并将其添加到另一个有碰撞的组中。我真的不知道。

【问题讨论】:

    标签: pygame collision


    【解决方案1】:

    当玩家死亡时,我会设置一个变量,其中包含您希望它无懈可击的帧数。当您进行碰撞检测时,您可以检查玩家是否有任何剩余的无敌帧,并且仅在没有剩余帧时处理碰撞。

    def kill_player(player):
        # handle moving the player after death, anything else you need to do
        # set player invulnerability to 30 frames
        player_invulnerable_frames = 30
    
    if environment_rect.collides(player_rect) and player_invulnerable_frames = 0:
        # perform collision response stuff here
    

    在您的游戏循环或更新函数中,如果当前无敌帧数大于零,您可以减少它的数量

    while(running):
        # your game loop stuff
        if player_invulnerable_frames > 0:
            player_invulnerable_frames -= 1 
    

    【讨论】:

    • 感谢 Haz,逻辑有效。我将所有内容都放在我的 main() 中,因为它只是一个玩家,我所有的碰撞也都在 main 中。我尝试使用它,以便玩家的每个实例都有自己的无懈可击的价值,但是当玩家在我的 main() 的 spriteGroup 中时调用查看该值是什么时,我无法让它工作。无论如何,谢谢它正在工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多