2009年11月18日 星期三

每個人都要會的Actionscript Tweener(二)-影片連續動作

在做動畫時常常會遇到要拉動作,是設計人員拉好動作還是程式人員用程式控制??
一般來說還是會以設計為主,用拉時間軸的方式來做,感覺比較省時跟省力

但真的是這樣嗎??

我倒是覺得有些動作用程式來處理還是會方便些,尤其常常會換來換去或修改的影片
這邊就分享一下如何讓影片做一些連續動作
(倒不是說拉動畫不好,其實要交互配合)

還是使用Tweener,真是太好用了

之前介紹Tweener的參數(請參考這裡),是以控制影片屬性為主,底下幾個的幾個屬性是Tweener的在開始動作或完成動作可以使用的屬性,我們就使用onComplete來完成影片的連續動作

delay:延遲幾秒開始
onStart:一開始動作呼叫的function 
onStartParams:一開始動作傳入的參數
onComplete:完成動作呼叫的function 
onCompleteParams:完成動作傳入的參數 




1.控制影片做連續的動作,使用onComplete,當動作完成接下去作其它的動作





code1:
import caurina.transitions.Tweener;

Tweener.addTween(a_mc, {x:400, 
                        y:200, 
                        time:1,
                        onComplete:onCom});

function onCom():void
{
    Tweener.addTween(a_mc, {x:400, y:50, time:1});
} 

解說:a_mc跑到坐標(400,200)完成後會呼叫onCom這個function,然後再執行a_mc跑到坐標(400,50)


2.上一個步驟完成了連續二個動作,但通常動畫是一直重覆動作的,所以要還要再調整。
 用一個陣列把動作的作標存起來,a_mc照著陣列裡的坐標跑,改寫成這樣

code2:
import caurina.transitions.Tweener;

/**
 * motinXY:連續動作的作標
 * currentMotion:目前的作標位置
 * @author Jim
 */
var motionXY:Array = [[400, 200], [400,50], [100, 300], [80, 80]];
var currentMotion:int = 0;

/**
 * 完成動作後呼叫的function 
 */
function onCom():void
{
    //跑完要回到第一個
    if( currentMotion >= motionXY.length ){
        currentMotion = 0;
    }
    
    var X:int = motionXY[currentMotion][0];
    var Y:int = motionXY[currentMotion][1];
    Tweener.addTween(a_mc, {x:X, y:Y, time:1, onComplete:onCom});
    
    currentMotion++;
}

//開始動作
Tweener.addTween(a_mc, {x:motionXY[currentMotion][0], 
                         y:motionXY[currentMotion][1], 
                        time:1,
                        onComplete:onCom});


3.這樣就完成了一個影片的連續動作,如果要更改或增加移動坐標只要對motionXY處理就好了。當然這只是一小步,再配合旋轉或大小變化就更生動了。








Source Download



0 意見: