Sprite.rotation + = 10; Sprite.rotation * = 0.97;as3旋轉拖動/加速
因爲在as3系統從180到-180我不知道如何將一個拖動應用到一個不斷旋轉的對象,如果它向任一方向移動。我是否必須以某種方式轉換爲弧度,然後執行某些操作?數學相當糟糕。
Sprite.rotation + = 10; Sprite.rotation * = 0.97;as3旋轉拖動/加速
因爲在as3系統從180到-180我不知道如何將一個拖動應用到一個不斷旋轉的對象,如果它向任一方向移動。我是否必須以某種方式轉換爲弧度,然後執行某些操作?數學相當糟糕。
它實際上從180到-180(與魯本說的相反),但是更高/更低的值會自動更正到該範圍(即181被轉換爲-179)......一種方法來處理這個問題是使用一個輔助變量爲你的數學(無論動畫或),然後將其分配給旋轉,說:
myVar+=10;
myVar*=.97;
clip.rotation=myVar;
我不知道「拖」是有道理的和你所發佈的代碼。你顯示的東西會慢慢將物體捲回到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;
}
我認爲你正在尋找這樣的:很多
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));
}
這是我一直在尋找的答案,謝謝 – Jeffrey 2009-11-21 05:25:38