当我尝试旋转我的抛射物以及船的旋转时,我遇到了一个大问题。
我希望我的宇宙飞船能够同时射击两次。所以我使用了我的第一批射弹并将它们放置在船的右侧(左侧一个射击,右侧射击一个)。到目前为止一切都很好。
但是当我用我的宇宙飞船射击时,我转过身来,旋转的射弹看起来很奇怪。这很难描述,这是一个显示错误的图像。
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;
答案 0 :(得分:1)
速度代码看起来不错。您似乎没有正确计算喷枪位置。
编辑:我们没有使用标准的三角形参考框架;相反,我们使用的是当你顺时针旋转时,角度= 0表示向上并且角度增加。所以我们采用标准用法并交换 sin 和 cos 。
此处,gx
和gy
表示枪的坐标相对于船舶移动的坐标。我们需要旋转矢量< 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的符号。