Flash Flex學習筆記 38 緩動動畫

2022-01-31 15:26:45 字數 1562 閱讀 9958

緩動 與 勻變速 看上去很類似,但其實有區別:

勻變速的公式為 v = v0 + at --速度v與時間t是線性(正比)關係,而且這種運動不需要確定目標點,速度可以按照這種規律一直變下去

而緩動指的是物體越接近目標時速度越慢,速度跟距離成反比關係,用公式描述為 v = k s  (0先看個演示:

**:

package 

private function init():void );

//在中心畫個十字架

graphics.linestyle(1);

graphics.moveto(targetx-15,targety);

graphics.lineto(targetx+15,targety);

graphics.moveto(targetx,targety -15);

graphics.lineto(targetx,targety +15);

}private function enterframehandler(e:event):void

}//開始拖動

private function mousedownhandler(e:mouseevent):void

//停止拖動

private function mouseuphandler(e:mouseevent):void

}}

特別要注意的問題:

先來了解一下著名的"xeno悖論",假如乙個物體要從a點移動到b點,可以這樣處理:每次將物體移動一半的距離,然後再以物體所在新位置為a點,繼續前面的處理... 這樣物體會不斷向b點靠近,直到移動到b點;但從另一角度考慮,因為每次只移動一半的距離,所以永遠也不可能真正達到b點。

如果我們把上面**中的比例因子private var easing:number=0.15;改成0.5,就形成了該悖論。同時再考慮另乙個因素,flash每次能將物體移動的最小距離為0.05象素(即1/20象素),比這個值再小的距離,flash將不會處理。

這樣的話,假設物體要移動到 100的x座標位置,當前已經到了99.95,根據比例因子0.5的設定,下一次應該移動 (100 - 99.95)/2 = 0.025,這個值已經超出了flash的處理能力,系統會把0.025當成0來處理,即不移動。

所以再回頭看上面的**,我們在判斷物體是否到達目標點時,不能用 ball.x == targetx 來精確判斷,因為這樣的條件也許永遠不會成立,從而導致後面的removeeventlistener也永遠不會被執行到,合理的做法是達到一定的精度值時,就可以認為已經移動完成,從而做出相應的處理.

緩動滑鼠跟隨

**:package

private function init():void{

arrball = new array(30);

for(var i:uint=0,j:uint=arrball.length;i如果把這個例子稍加改造,可能效果更cool:

最後:本文所提到的緩動均指越來越慢,實際上flash/silverlight的ide介面提供的緩動型別更多(比如先慢慢啟動,再慢慢停止--即淡入淡出之類),對應的公式也有不少,www.robertpenner.com 大家可以到這上面找找,一定會發現不好好東西

Flash Flex學習筆記 22 濾鏡學習

silverlight中稱之為 效果 effect 的東東,在flash裡叫 濾鏡 filter 而且flash裡內建的濾鏡要比silverlight豐富很多,幾乎所有物件都有乙個filters的屬性,它是乙個陣列,可以將乙個或多個濾鏡同時應用於某一物件,類似的,如果要去除已經應用的濾鏡效果,只要將...

Flash Flex學習筆記 14 按鍵捕獲

先來看簡單的單個按鍵捕獲 package privatefunctioninit void publicfunctionkeydownhandler e keyboardevent void if e.ctrlkey if e.shiftkey if e.altkey 再來看下類似 a b c 的這...

Flash Flex學習筆記 34 彈性運動

動畫中的彈性運動 從視覺效果上接近 物理經典力學中的單擺運動或彈簧 胡克定律f kx 振動 先看下面的模擬演示 規律 小球先從出發點 初始為最左側 向目標點 中心點 加速狂奔,奔的過程中速度越來越大,但加速度越來越小,等經過目標點時,發現速度太大剎不住車 此時速度達到最大值,但加速度減為0 奔過頭了...