2011-11-30 53 views
2

我用Box2D製作了一款汽車遊戲[在Flash中],我還有一個剩餘的錯誤,我無法修復。我添加了圖形並將它們放在Box2D主體的頂部。一切都如預期一樣好,但在X輪旋轉後,電影剪輯車輪,停止旋轉。我做了這樣的事情wheelSprite.rotation = wheelBody.GetAngle() * 180/Math.PI。我運行了一個單獨的程序,我看到如果你做了X.rotation += variable並且你在每幀增加變量,在〜30 000(變量的值)之後,MovieClip停止旋轉,所以我在〜28 000後將它重置爲0。做? wheelBody.GetAngle()不斷上升,我需要它使它看起來真實。我該如何重置?MovieClip在Box2D後停止旋轉Body

回答

0

您不能使用SetAngle()函數將角度設置爲等效角度嗎?

ie:如果角度旋轉360度,將其設置回0?

4

前段時間我遇到了這個問題。解決方案是:

rotation = newRotation % 2*Math.PI; 

這意味着旋轉必須在0到360度之間(0 - 2 * PI)。

0

的Box2D的手動指定機構的轉動是無界的,並經過一段時間可能會大,你可以,您可以在使用SetAngle復位。我使用while循環來計算標準化角度(你可以用浮點操作數顯然調用模,但我不知道這是否對性能不好)。此代碼將角度標準化爲0 <= angle < 2pi,但我也看到角度有時會標準化爲-pi <= angle < pi

const 2PI:Number = Math.PI * 2; 
var rotation:Number = wheelBody.GetAngle(); 
// normalize angle 
while(rotation >= 2PI) 
    rotation -= 2PI; 
while(rotation < 0) 
    rotation += 2PI; 
// store the normalized angle back into Box2D body so it doesn't overflow (optional) 
wheelBody.SetAngle(rotation); 
// convert to degrees and set rotation of flash sprite 
wheelSprite.rotation = rotation * 180/Math.PI; 

我還沒有收集到一個函數的代碼,但它會很容易這樣做。