Flash游戏中激光束的旋转角度和产生点

时间:2014-06-05 20:38:23

标签: actionscript-3 flash rotation

我试图找出从鼠标点击的大炮射出的激光束的旋转角度和生成点。我正在使用ActionScript 3和Flash。

我根据鼠标光标位置旋转光束,感觉效果很好。该 问题是我的激光束的产生点,它发生了故障。我希望它能够与大炮对齐,即它的旋转点必须是大炮。我如何在Flash中执行此操作?

请查看图片文件以便我更清楚。

以下是在actionscript

中执行旋转和位置逻辑的代码片段
laserBeamRight = new RightLaserBeam();
stage.addChild(laserBeamRight);
laserBeamRight.x = 812.65;
laserBeamRight.y = 400.1;
var angle2:Number = Math.atan2(stage.mouseY - laserBeamRight.y, stage.mouseX - laserBeamRight.x);
laserBeamRight.rotation = 180 * angle2/Math.PI;

我有位置的硬编码值。它们代表着正确的大炮位置。

这是显示问题的图像文件。 enter image description here

所以我希望光束的目标是鼠标十字准线,这很好,但我想让它固定并围绕大炮旋转。

另一个有两个不同角度光束的图像。 X位置正确,但由于角度

,Y位置看起来不合适

enter image description here

最后一张图片清楚地显示了我的问题。

X位置是正确的,因此是Y位置,但它来自光束的中心点,而不是光束的终点或尾部。我希望光束的尾部能够卡在大炮的位置上。我尝试将闪光灯内的光束影片剪辑的枢轴点更改为尾部,但这没有用。

enter image description here 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

首先,调整激光MC,使其锚点位于起点而不是中间,然后将其与炮塔中心对齐,就像你已经做好的那样。然后,当您要在特定的(x,y)处击中对象时,使用Math.atan2()计算旋转鼠标光标的坐标(使用turret.globalToLocal(new Point(event.stageX,event.stageY))),然后您应该缩放激光以使其结束将击中光标位置,更改其scaleX。请注意,您应该在一个坐标空间(炮塔)中进行所有过渡,您显然已经转动了炮塔的加农炮部件,因此您可以为激光做同样的事情,并添加它作为炮塔的一部分,可能将它定位在大炮部分后面。例如:

// laser MC is like this: *>>>>>>>-------
// * is anchr point, laser is aligned righwards
const laserlength:Number=500; // the length of the laser, the X of the point you want to hit the cursor
....
function fireLaser(e:MouseEvent):void {
    // creates a laser
    var laser:Laser=new Laser();
    laser.x=turret.centerX; // where to position the laser beginning
    laser.y=turret.centerY; // relative to the turret
    turret.addChildAt(laser,0); // add as a part of turret, behind everything
    var cursor:Point=turret.globalToLocal(new Point(e.stageX,e.stageY));
    laser.rotation=Math.atan2(cursor.y-laser.y,cursor.x-laser.x)*180/Math.PI; 
    // rad-to-deg conversion
    laser.scaleX=Point.distance(cursor,new Point(turret.centerX,turret.centerY))/laserlength;
    // lasers.push(laser); // expecting you to do this so laser should fade with time
}