2009-11-21 2 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

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