从它的当前角度as3旋转精灵

时间:2014-10-07 18:57:35

标签: actionscript-3 flash math trigonometry

我创建了一个用鼠标旋转的对象,但每次旋转后,当再次单击鼠标时,对象“跳”到它的新角度我希望对象将继续从它的当前位置旋转否鼠标点击的地方。 这是我旋转对象的代码。

public function _mouseclick(me:MouseEvent):void
{
    addEventListener(Event.ENTER_FRAME, UpdateGame);
    IsButtonClicked = true;
}

public function UpdateGame(e:Event):void
{
    if (IsButtonClicked)
    {
       var dist_Y:Number = mouseY - PlayerSprite.y ;
       var dist_X:Number = mouseX - PlayerSprite.x ;
       var angle:Number = Math.atan2(dist_Y, dist_X);
       var degrees:Number = angle * 180/ Math.PI;
       PlayerSprite.rotation = degrees;
    } 
}

如何将角度重置为当前精灵角度并防止“跳跃”?

2 个答案:

答案 0 :(得分:1)

看起来好像你正试图制作某种旋钮或拨号盘。找到鼠标和精灵之间的角度并按照你的方式应用它将始终面向那个方向。我认为你正在寻找一些更简单的东西。

首先我要设置2个变量,一个是增加旋转的量,另一个是存储鼠标位置。

var increment:int = 5;
var mousePos:Point;

然后在鼠标单击功能中:

mousePos = new Point( mouseX, mouseY );

最后在UpdateGame()

private function UpdateGame( e:Event ):void {
    if ( IsButtonClicked ) {
        var increment:int = 5;
        if ( mousePos.y < mouseY ) {
            spr.rotation += increment;
        }
        else {
            spr.rotation -= increment;
        }
        mousePos = new Point( mouseX, mouseY );
    }
}

这似乎更符合您的需求。在这种情况下,当您向上移动鼠标时,精灵逆时针旋转。向下移动鼠标,顺时针旋转。

答案 1 :(得分:0)

如果要平滑地更改旋转,您希望将其作为增量从上次旋转的更改开始。

增量基于鼠标点击相对于当前旋转的初始旋转。

current_rotation += (atan2 - last_rotation);
last_rotation = atan2;

完整的伪示例。

private var current_rotation:Number;
private var last_rotation:Number;
private var mouse_down:Boolean;

public function MouseClick(e:MouseEvent):void
{
    var dX:Number = Mouse.X - 400;
    var dY:Number = Mouse.Y - 300;
    var atan2:Number = Math.atan2(dY, dX);
    last_rotation = atan2;

    mouse_down = true;
}

public function UpdateGame(e:Event):void
{
    if (mouse_down)
    {
        var dX:Number = Mouse.X - 400;
        var dY:Number = Mouse.Y - 300;
        var atan2:Number = Math.atan2(dY, dX);
        current_rotation += (atan2 - last_rotation);
        last_rotation = atan2;
    }
}