You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thumby游戏开发:避免超级角色降级后触发endGame函数

解决方案:添加无敌帧计数器避免重复碰撞触发游戏结束

针对你的问题,最直接的解决方式是新增一个无敌帧计数器,用来在超级角色降级后的指定帧数内,阻止endGame()函数执行。这种方式不需要测试碰撞重叠点,逻辑简单易实现。

修改后的完整代码示例

SuperCharacter = False
invincibility_frames = 0  # 记录剩余无敌帧数,0表示无无敌状态

while GameRunning:
    # 每帧先更新无敌帧计数
    if invincibility_frames > 0:
        invincibility_frames -= 1
    
    # 碰撞检测逻辑(先统一判断是否碰撞,再细分精灵类型)
    if CharacterPos == x and SpritePos == x:
        if Sprite == Cactus:
            if not SuperCharacter:
                # 非超级状态下,只有无敌帧为0时才触发游戏结束
                if invincibility_frames == 0:
                    endGame()
            else:
                # 超级状态被仙人掌撞击:降级并开启60帧无敌
                SuperCharacter = False
                invincibility_frames = 60  # 设置60帧无敌,可根据需求调整
        elif Sprite == Star:
            # 非超级状态下吃到星星,升级为超级角色
            if not SuperCharacter:
                SuperCharacter = True

逻辑说明

  1. 无敌帧计数器:invincibility_frames初始为0,当超级角色被仙人掌撞降级时,设置为60(你需要的帧数),之后每帧自动减1,直到回到0。
  2. 碰撞判断优先级:先统一判断角色与精灵是否碰撞,再根据精灵类型和角色状态执行对应逻辑,比原代码的多条件嵌套更清晰。
  3. 避免重复触发:在非超级状态下,只有无敌帧为0时才会触发endGame(),完美解决了降级后下一帧仍被判定碰撞的问题。

原代码的小问题修正

原代码中Sprite = Star or Cactus的逻辑错误,这里应该是每帧检测当前与角色碰撞的具体精灵类型(是星星还是仙人掌),而不是提前赋值。

内容的提问来源于stack exchange,提问作者Steven Dezort

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:07:04