Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 从中旋转精灵';s电流角as3_Actionscript 3_Flash_Math_Trigonometry - Fatal编程技术网

Actionscript 3 从中旋转精灵';s电流角as3

Actionscript 3 从中旋转精灵';s电流角as3,actionscript-3,flash,math,trigonometry,Actionscript 3,Flash,Math,Trigonometry,我创建了一个用鼠标旋转的对象,但是每次旋转后,当再次单击鼠标时,该对象会“跳转”到它的新角度,我希望该对象将继续从其当前位置旋转,无论鼠标被单击在何处。 这是我旋转对象的代码 public function _mouseclick(me:MouseEvent):void { addEventListener(Event.ENTER_FRAME, UpdateGame); IsButtonClicked = true; } public function UpdateGame(e

我创建了一个用鼠标旋转的对象,但是每次旋转后,当再次单击鼠标时,该对象会“跳转”到它的新角度,我希望该对象将继续从其当前位置旋转,无论鼠标被单击在何处。 这是我旋转对象的代码

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;
    } 
}

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

看起来您可能正在尝试制作某种旋钮或刻度盘。找到鼠标和精灵之间的角度并按您的方式应用,将始终面向该方向。我想你在找更简单一点的东西

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

var increment:int = 5;
var mousePos:Point;
然后在鼠标单击功能中:

mousePos = new Point( mouseX, mouseY );
最后,在
UpdateGame()中:

私有函数UpdateGame(e:Event):void{
如果(IsButtonClicked){
var增量:int=5;
if(mousePos.y

这似乎更像是你想要的效果。在这种情况下,向上移动鼠标时,精灵将逆时针旋转。向下移动鼠标,将其顺时针旋转。

如果要平滑地更改旋转,请将上次旋转的更改作为增量

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

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;
    }
}
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;
    }
}