Cocos2d / Cocos2d-x将箭头(精灵)附加到另一个身体精灵(人物)

我正在试图建立一个简单的弓箭游戏。 当箭头击中敌人身体时,箭头的身体被删除,箭头精灵继续更新,保持相对于它命中的敌人的位置正确。 画一个箭头粘在身体和身体仍然在旋转和移动。 我的问题是当敌人旋转时旋转是完全错误的。 我知道如何用matrix变换在3d中做到这一点,但我似乎无法在2d与科科斯弄清楚。

这是我的方法。

  1. 我保存箭头击中敌人的偏移量。
  2. 每一帧,我都会使精灵的旋转与敌人的旋转相匹配。
  3. 然后,我应用我最初拿的那个箭头击中敌人的偏移量。

当他们旋转,他们围绕他们各自的锚点旋转,我想知道如果我需要设置箭头的锚点的精灵中心。 有谁知道一个简单的方法来做到这一点。 如果没有,我会尝试创建一个algorithm,其中的锚点被设置为偏移量除以精灵图像的宽度和高度,希望给我正确的锚点值。

那么我想我需要重新定位精灵。

有没有人有一个更简单的方法来做到这一点?

我认为你可以通过应用下面的algorithm来完成这个(以伪代码显示):

rotateEnemyAndArrow() { start = arrowPointOfContact - enemyCenter destination = start.rotate() // Rotate the start vector by the enemy's rotation enemy.rotateAroundPoint(enemyCenter) arrow.rotateAroundPoint(arrowPointOfContact) arrow.translate(destination - start) } 

arrowPointOfContactenemyCenter表示敌人和敌人的旋转中心的箭头的接触点。

为了显示:

在任何轮换完成之前,我们有:

在旋转之前

蓝色箭头代表startvector。

执行algorithm中列出的所有旋转(在这种情况下,它是一个90度的旋转,但它将适用于任何),我们有:

旋转后

黄色箭头表示destinationvector,洋红色箭头是我们的destination - startvector,绿色箭头精灵必须转换到其最终位置。