大家好,所以我遇到了一些麻烦。所以我有一个 Barrel 影片剪辑添加到舞台上,还有一个名为 Circle 的影片剪辑,当它与阵列中的任何一个桶接触时它目前正在测试开始旋转。它在其对中点上旋转。所以在我的ENTER_FRAME事件中,我有所有设置滚筒旋转并点击测试等...
这就是圈子被添加到桶中的方式:
if (!circleFired)
{
circle.x = globalFirePoint.x;
circle.y = globalFirePoint.y;
currentCannon.addChildAt(circle, 0);
}
现在我想要完成的是当用户点击屏幕时,从Barrel中拍摄圆形影片剪辑。现在我的圆圈从它应该拍摄的角度射出,但不是从它射出的角度沿直线射出它射击并开始在枪管旋转的顺时针位置快速弯曲。
除了一个问题之外,这里有我的代码:
var dX:Number = globalFirePoint.x;
var dY:Number = globalFirePoint.y;
var angle:Number = Math.atan2(dY, dX);
if (circleFired)
{
circle.x += Math.sin(deg2rad(angle -90)) * velocity;
circle.y += Math.cos(deg2rad(angle - 90)) * velocity;
}
所以globalFirePoint
就是这样:
globalFirePoint = localToGlobal(new Point(currentCannon.mcFirePoint.x, currentCannon.mcFirePoint.y));
这是我想让圆圈射击的起点。
这是deg2rad函数:
private function deg2rad(num:Number):Number
{
var radians:Number = num * (Math.PI / 180);
return radians;
}
我知道我需要罪和cos来计算角度是否正确?数学错了吗?当圆圈从globalFirePoint射出时,为什么圆圈弯曲?我该怎么做才能让它直线前进?
任何帮助将不胜感激!
答案 0 :(得分:1)
每个globalFirePoint
事件ENTER_FRAME
会发生变化吗?如果是这样,那么计算出的角度也会发生变化,从而产生您正在经历的曲线。
解决此问题的一种方法是在用户按下屏幕时仅计算globalFirePoint
。然后在每个ENTER_FRAME
事件上,而不是重新计算globalFirePoint
,使用已经计算的globalFirePoint
,除非用户在圆圈处于桶内时按下屏幕,否则不会更改。{/ p>
您只应在用户按下屏幕时计算角度。没有必要在每个ENTER_FRAME
事件上计算它,因为你唯一对角度感兴趣的是从圆筒中射出圆圈。