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