射击时的旋转问题

时间:2011-09-04 23:17:48

标签: actionscript-3 math geometry

当我尝试旋转我的抛射物以及船的旋转时,我遇到了一个大问题。

我希望我的宇宙飞船能够同时射击两次。所以我使用了我的第一批射弹并将它们放置在船的右侧(左侧一个射击,右侧射击一个)。到目前为止一切都很好。

但是当我用我的宇宙飞船射击时,我转过身来,旋转的射弹看起来很奇怪。这很难描述,这是一个显示错误的图像。

http://imageshack.us/photo/my-images/841/projectilebug.jpg

我在使用太空船旋转抛射物时遇到了很大问题,因此看起来非常好。目前只有一个单一的镜头。当我旋转并立刻开火时,我的射击被搞砸了。 目标是创建一个双重射击大炮,如图所示。

以下是一些将射弹放置在船的左侧的代码(实际上并不起作用):

var projectileRadians:Number = (player.frame / 180) * 3.14159;

tempProjectile.x = (player.point.x + 6) + Math.cos(projectileRadians);
tempProjectile.y = (player.point.y + 3) + Math.sin(projectileRadians);

速度代码:

tempProjectile.nextX = tempProjectile.x;
tempProjectile.nextY = tempProjectile.y;
tempProjectile.dx = rotationVectorList[player.frame].x;
tempProjectile.dy = rotationVectorList[player.frame].y;

这会更新职位:

nextX += (dx * (speed + Math.abs(xAdjust))) * step;
nextY += (dy * (speed + Math.abs(yAdjust))) * step;

1 个答案:

答案 0 :(得分:1)

速度代码看起来不错。您似乎没有正确计算喷枪位置。

编辑:我们没有使用标准的三角形参考框架;相反,我们使用的是当你顺时针旋转时,角度= 0表示向上并且角度增加。所以我们采用标准用法并交换 sin cos

此处,gxgy表示枪的坐标相对于船舶移动的坐标。我们需要旋转矢量< gx,gy>在将它添加到船舶坐标之前的角度:

cs = Math.cos(projectileRadians);
sn = Math.sin(projectileRadians);
tempProjectile.x = player.point.x + gx * sn - gy * cs;
tempProjectile.y = player.point.y + gx * cs + gy * sn;

将船舶的角度限制在某些值(可能每5度)并将所有三角函数提前放入表中将是一个很好的优化。 Trig函数的计算成本很高。

请注意,这也假设正Y是“向上”。计算机图形通常从左上角的(0,0)开始,并在向下移动时增加Y,因此您可能必须切换Y的符号。