制作船游戏,因为我非常原始..除此之外,我有一个问题。我有一个函数可以根据它的旋转从我的船上发射子弹。它在创建时使用了这个代码:
var b = new Bullet ;
b.x = x;
b.y = y;
b.rotation = rotation;
parent.addChild(b);
bullets.push(b);
score -= 50;
trace(enemybullets[30].x + "," + enemybullets[30].y);
上面的代码在我的Ship类中,所以我可以轻松地让子弹实现正确的旋转。 并在子弹的课堂上不断更新自己的位置:
x += Math.cos(rotation / 180 * Math.PI) * speed;
y += Math.sin(rotation / 180 * Math.PI) * speed;
所以一切顺利。但是我有另一个类,EnemyBullet,它随机生成并使用类似的代码来设置它的方向和运动。在我的船级:
var eb = new EnemyBullet ;
eb.x = (Math.random() * 550) - 550;
//trace("eb.x is " + eb.x)
eb.y = (Math.random() * 400) - 400;
//trace("eb.y is " + eb.y);
var a1 = eb.y - y;
var b1 = eb.x - x;
var radians1 = Math.atan2(a1,b1);
var degrees1 = radians1 / Math.PI / 180;
eb.rotation = degrees1;
if (enemybullets.length < 50)
{
parent.addChild(eb);
enemybullets.push(eb);
}
在EnemyBullet课程中:
x += Math.cos(rotation / 180 * Math.PI) * speed;
y += Math.sin(rotation / 180 * Math.PI) * speed;
我设置了一条跟踪来跟踪我的一颗子弹的位置,因为它们肯定没有出现在我的屏幕上..这是我追踪的结果:
x: 121.55, y:-162.05
x: 1197.05, y:-162.05
x: 1842.35, y:-162.05
x: 2368.15, y:-162.05
x: 2547.4, y:-162.05
x: 2702.75, y:-162.05
x: 2882, y:-162.05
我认为旋转因此总是水平的,但不能为我的生活看到原因?有人能给我一个答案吗?假设它很简单,因为我用来设置旋转的代码与我用来将动画片段转向鼠标的工作代码相同..
有什么想法吗?
的Ta!
答案 0 :(得分:0)
从弧度到度数的转换包含一个错误:
var degrees1 = radians1 / Math.PI / 180;
应该是:
var degrees1 = radians1 / Math.PI * 180;
或者让它更容易理解:
var degrees1 = 180 * radians1 / Math.PI;
在你的情况下,degrees1可能是0附近的值;所以运动总是水平的。