2D平台游戏角色专属浮空能力错误赋予所有角色的问题解决
角色专属浮空能力逻辑错误排查与修复
我编程基础还在学习阶段,目前在做一款类似《超级食肉男孩》的2D平台游戏。跟着教程搭完基础移动系统后,我加了布尔变量来切换不同角色,给每个角色设置专属属性和能力,但遇到了逻辑问题:
原代码里的浮空触发条件:
if (_jumpBufferTimer > 0f && isMif && InputManager.JumpIsHeld && _isJumping && _isFalling || _isFastFalling) { _isFloating = true; }
原本想让浮空能力只属于isMif为true的角色,但实际即使isMif为false,其他角色只要进入快速下落(_isFastFalling为true)就能触发浮空。我试过加!isTurdo(另一个角色的布尔变量)也没用,只要isTurdo为true且处于快速下落状态,还是能浮空。
后来我把条件语句改成这样就解决了问题:
if ((_jumpBufferTimer > 0f && isMif && InputManager.JumpIsHeld && _isJumping && _isFalling) || (_isFastFalling && isMif)) { _isFloating = true; }
问题根源
这是逻辑运算符优先级导致的:&&的优先级比||高,原条件会被编译器自动解析成:
(_jumpBufferTimer > 0f && isMif && InputManager.JumpIsHeld && _isJumping && _isFalling) || _isFastFalling
也就是说,只要_isFastFalling为true,不管isMif是不是false,整个条件都会成立,直接触发浮空。
修复思路
用括号把两个条件分支明确分组,确保两个分支都必须满足isMif为true:
- 第一个分支:满足跳跃缓冲、Mif角色、按住跳跃键、正在跳跃且下落时触发浮空
- 第二个分支:只有Mif角色处于快速下落状态时,才触发浮空
这样就严格限制了浮空能力只能由isMif为true的角色触发,其他角色即使进入快速下落也无法激活这个能力。
内容的提问来源于stack exchange,提问作者Adroopyboi
相关产品推荐
相关产品推荐

