as3旋转阻力/加速度

时间:2009-11-21 02:56:46

标签: actionscript-3

Sprite.rotation + = 10; Sprite.rotation * = 0.97;

因为在as3系统从180到-180我不知道如果向任意方向移动,如何将拖动应用于不断旋转的对象。我是否必须以某种方式转换为弧度然后做某事?我的数学很糟糕。

3 个答案:

答案 0 :(得分:1)

实际上确实从180到-180(与Reuben所说的相反),但是更高/更低的值会自动更正到该范围(即181转换为-179)...一种方法是使用它是使用辅助变量进行数学运算(动画或其他),然后将其分配给旋转,比如说:

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

答案 1 :(得分: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;
}

答案 2 :(得分: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));
}