2009-11-21 104 views
0

Sprite.rotation + = 10; Sprite.rotation * = 0.97;as3旋转拖动/加速

因为在as3系统从180到-180我不知道如何将一个拖动应用到一个不断旋转的对象,如果它向任一方向移动。我是否必须以某种方式转换为弧度,然后执行某些操作?数学相当糟糕。

回答

1

它实际上从180到-180(与鲁本说的相反),但是更高/更低的值会自动更正到该范围(即181被转换为-179)......一种方法来处理这个问题是使用一个辅助变量为你的数学(无论动画或),然后将其分配给旋转,说:

myVar+=10; 
myVar*=.97; 
clip.rotation=myVar; 
+0

这是我一直在寻找的答案,谢谢 – Jeffrey 2009-11-21 05:25:38

1

我不知道“拖”是有道理的和你所发布的代码。你显示的东西会慢慢将物体卷回到0转。

如果您想要拖/加速效果,请使用您的加速因子创建一个单独的变量,然后应用每一帧。然后,您可以对该变量应用一个因子以减慢/减慢旋转速度。

喜欢的东西:

private var _rotationAcceleration:Number = 0; 
private var _dragFactor:Number = 0.97; 
private var _clip:Sprite; 

private function startSpin():void { 
    _rotationAcceleration = 10.0; 
} 
private function enterFrameListener(event:Event):void { 
    _clip.rotation += _rotationAcceleration; 
    _rotationAcceleration *= _dragFactor; 
} 
1

我认为你正在寻找这样的:很多

private function updateRotation():void 
{ 
    var _dx:Number = _player.x - stage.mouseX; // rotate _player mc to mouse 
    var _dx:Number = _player.y - stage.mouseY; // rotate _player mc to mouse 

    // which way to rotate 
    var rotateTo:Number = getDegrees(getRadians(_dx, _dy)); 

    // keep rotation positive, between 0 and 360 degrees 
    if (rotateTo > _player.rotation + 180) rotateTo -= 360; 
    if (rotateTo < _player.rotation - 180) rotateTo += 360; 

    // ease rotation 
    var _trueRotation:Number = (rotateTo - _player.rotation)/5; // rotation speed 5 

    // update rotation 
    _player.rotation += _trueRotation;   
} 

public function getRadians(delta_x:Number, delta_y:Number):Number 
{ 
    var r:Number = Math.atan2(delta_y, delta_x); 

    if (delta_y < 0) 
    { 
     r += (2 * Math.PI); 
    } 
    return r; 
} 

public function getDegrees(radians:Number):Number 
{ 
    return Math.floor(radians/(Math.PI/180)); 
}