我有下面的代碼位:enterFrame事件吐溫計算返回意外結果
protected function onEnterFrame(e:Event):void
{
var diff:Number;
// position map/tree
if (x != _targetX) {
diff = _targetX - x; // get the difference
x += diff * 0.2; // tween x position
diff = diff < 0 ? -diff : diff; // get absolute value
if (diff < 0.05) {
x = _targetX;
}
}
}
我設置_targetX
僅在我的應用程序兩個值之一:0
或-1360
。當我將它設置爲0
時,補間就像您期望的那樣執行。當我將它設置爲-1360
時,會發生一件奇怪的事情......中間體按照您預期的那樣執行,直到最後一點。 x
達到-1359.8
和差異達到0.20000000000004547
,它在這一點上,它只是停滯不前。 x
不再接近_targetX
並且這些值僅適用。他們不會讓步。結果if (diff < 0.05)
條件從不計算爲真,並且補間邏輯繼續無限期地執行。
我猜它與浮點精度有關,但我不確定是否有解決方案。有任何想法嗎?
謝謝debu!你的解決方案的確可行現在我想知道*爲什麼* :) – heavilyinvolved 2010-03-02 04:39:13
沒問題,很高興它幫助!看起來像另一個人張貼了一個原因,所以都清除了:) – debu 2010-03-02 04:51:53