我正在为 Android 开发一个 2D 水下动作角色扮演游戏,使用 Box2D 作为物理引擎,主要用于在由墙壁、岩石和其他生物组成的环境中的碰撞检测、碰撞响应和游戏中角色的移动。
我尝试了两种不同的方法来使用 Box2D 实现角色动画,并发现两者都有问题。由于我是 Box2D 和物理引擎的新手,我会很感激关于如何最好地完成这些事情的建议。
我正在尝试做的动画示例如下:
一条鱼想要攻击另一条鱼,以下操作也是如此:
1) 以速度向目标移动
2) 咬一口目标生物
3) 转身逃跑,回到攻击开始的地方
4) 转身面对目标,准备好进行另一次攻击
我尝试过的两种方法是:
A)对攻击者施加一个力(使用body.applyForce()
)将其移向目标,然后在碰撞后再次将其移
回以极快的速度返回,并从墙上反弹,到处都是。速度是相当随机的,取决于它影响目标的位置、目标的质量等。它会破坏动画并且看起来很糟糕。
* 很难弄清楚应该对攻击者施加什么力以及何时在物理世界中模拟特定动画以使其看起来逼真
B)直接设置攻击者的位置(使用body.setTransform())将攻击者移动到正确的位置,因为它每一步向前移动,然后再次向后移动。
问题:
* 直接设置位置可以让攻击者忽略与墙壁和其他生物的碰撞,因此卡在墙上很常见
* 如果玩家正在攻击,我会在玩家移动时更新世界原点,以使玩家保持在屏幕中间。这很好用,除非我开始动画,因为我不希望屏幕跟随动画,但只有现有速度的运动分量,我不知道,因为我正在覆盖 Box2D 力/我设定位置时的速度。我敢肯定,这是可能的,但很困难——也许我遗漏了一些明显的东西。
我应该监控碰撞吗?覆盖碰撞响应??还有什么?
那么,你会建议我如何解决这个问题?