我正在试图建立一个简单的弓箭游戏。 当箭头击中敌人身体时,箭头的身体被删除,箭头精灵继续更新,保持相对于它命中的敌人的位置正确。 画一个箭头粘在身体和身体仍然在旋转和移动。 我的问题是当敌人旋转时旋转是完全错误的。 我知道如何用matrix变换在3d中做到这一点,但我似乎无法在2d与科科斯弄清楚。
这是我的方法。
当他们旋转,他们围绕他们各自的锚点旋转,我想知道如果我需要设置箭头的锚点的精灵中心。 有谁知道一个简单的方法来做到这一点。 如果没有,我会尝试创建一个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) }
arrowPointOfContact
和enemyCenter
表示敌人和敌人的旋转中心的箭头的接触点。
为了显示:
在任何轮换完成之前,我们有:
蓝色箭头代表start
vector。
执行algorithm中列出的所有旋转(在这种情况下,它是一个90度的旋转,但它将适用于任何),我们有:
黄色箭头表示destination
vector,洋红色箭头是我们的destination - start
vector,绿色箭头精灵必须转换到其最终位置。