• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Where there is a dream ,there is hope

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              64 Posts :: 0 Stories :: 8 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(1)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            #

            晚上 抽風(fēng) ,折騰電腦 ,安 了 個 UBUNTU.
            夜深了 ,明早起 來 在 這 下 面 寫個 小 程序玩下 .

            posted @ 2010-10-23 01:26 IT菜鳥 閱讀(201) | 評論 (0)編輯 收藏

            綜述

            參看前面的教程基礎(chǔ), 對象創(chuàng)建, 時鐘 , 框架層次結(jié)構(gòu), 動畫, 視口與攝像機(jī),和 聲音與音樂 。
            這篇教程介紹了什么是特效以及如何創(chuàng)建它們
            特效是將曲線及其組合而成的一組數(shù)據(jù)(正弦線、三角型邊、矩形或者線性),應(yīng)用在不同類型的參數(shù)中。如:縮放、旋轉(zhuǎn)、位置、速度、顏色等。

            特效在配置文件中設(shè)置,僅僅只需要一行代碼就可以在對象上使用這些特效。
            可以有最多8條任意類型的曲線組合在一起形成一個特效。
            在同一時間,可以有最多4個特效應(yīng)用于同一個對象上面。

            特效可以使用絕對值或者相對值,這取決于配置文件中Absolute標(biāo)簽。
            控制曲線的周期、相位、和振幅都是允許的。
            對于位置和速度特效來說,輸出值可以使用對象的方向 和/或 縮放值,以相對方式應(yīng)用于對象目前的狀態(tài)。

            這也就允許我們創(chuàng)造極其拉風(fēng)的視覺特效。

            除非特效已經(jīng)緩存在內(nèi)存中,否則特效參數(shù)全部在配置文件中進(jìn)行調(diào)整,并且使用退格鍵來即時重載。 (cf.通過 KeepInCache 屬性來實(shí)現(xiàn)內(nèi)存的緩存).
            比如說:你不能調(diào)整正在運(yùn)行的循環(huán)特效,因?yàn)樗呀?jīng)在默認(rèn)的配置文件中定義好了。在這個測試程序運(yùn)行的時候,所有其它的特效能夠被更新。

            通常說來,隨機(jī)值的使用可以給特效帶來更多的變化。
            比如, 晃動方式的縮放(the wobble scale), 帶顏色的閃光(the flash color) 和 攻擊式的移動(the “attack” move) 等特效就使用了少量的隨機(jī)值.

            就像顯示事件一樣,我們也可以注冊特效的開始播放和停止的事件。因?yàn)檠h(huán)時間是永遠(yuǎn)不會停下來的,所以對應(yīng)的停止事件(orxFX_EVENT_STOP)永遠(yuǎn)不會發(fā)生. 我們也會簡單的介紹一下如何一些個性數(shù)據(jù)(僅僅包含一個布爾值的結(jié)構(gòu))添加到orxOBJECT中。1)
            在事件的回調(diào)函數(shù)中,我們通過它,在特效開始的時候?yàn)閷ο蠹渔i,在結(jié)束的時候解鎖。
            我們使用鎖是為了讓soldier(士兵)在同一時刻只有一個特效在發(fā)揮作用。
            把這些東西寫在這里,僅僅具有教育意義。2)

            詳細(xì)內(nèi)容

            通常,我們先載入配置文件,創(chuàng)建一個時鐘,然后注冊更新函數(shù),最后,創(chuàng)建我們的士兵和盒子對象。請?jiān)?a class="wikilink1" title="cn:orx:tutorials:main" >之間的教程中獲取更多信息。 .

            然后,我們注冊輸入和特效事件

            orxEvent_AddHandler(orxEVENT_TYPE_FX, EventHandler);
            orxEvent_AddHandler(orxEVENT_TYPE_INPUT, EventHandler);

            大家可以看到,在這兩個事件中,我們使用了同一個回調(diào)函數(shù)(EventHandler).

            現(xiàn)在我們迅速的掃一眼自己的“對象”數(shù)據(jù)結(jié)構(gòu)。

            typedef struct MyObject
            {
            orxBOOL bLock;
            } MyObject;

            接下來,看看如何用 orxObject_SetUserData()將它綁定到soldier上

            MyObject *pstMyObject;
             
            pstMyObject = orxMemory_Allocate(sizeof(MyObject), orxMEMORY_TYPE_MAIN);
            pstMyObject->bLock = orxFALSE;
             
            orxObject_SetUserData(pstSoldier, pstMyObject);

            現(xiàn)在看看如何在Update函數(shù)中使用特效

            orxSTRING zSelectedFX;
             
            if(orxInput_IsActive("SelectWobble"))
            {
            zSelectedFX = "WobbleFX";
            }
            else if(orxInput_IsActive("SelectCircle"))
            {
            zSelectedFX = "CircleFX";
            }
             
            [...]
             
            // Soldier not locked?
            if(!((MyObject *)orxObject_GetUserData(pstSoldier))->bLock)
            {
            if(orxInput_IsActive("ApplyFX") && orxInput_HasNewStatus("ApplyFX"))
            {
            orxObject_AddFX(pstSoldier, zSelectedFX);
            }
            }

            可以看到,我們通過orxObject_GetUserData()這個函數(shù)得到了我們想要的數(shù)據(jù),向solder里添加特效的方法跟添加聲音的方法如出一轍,用的都是這個函數(shù)orxObject_AddFX()。

            接下來,看看EventHandler這個函數(shù)

            首先是輸入方面,這里只展示了每次輸入時哪個按鍵被使用了。

            if(_pstEvent->eType == orxEVENT_TYPE_INPUT)
            {
            if(_pstEvent->eID == orxINPUT_EVENT_ON)
            {
            orxINPUT_EVENT_PAYLOAD *pstPayload;
             
            pstPayload = (orxINPUT_EVENT_PAYLOAD *)_pstEvent->pstPayload;
             
            if(pstPayload->aeType[1] != orxINPUT_TYPE_NONE)
            {
            orxLOG("[%s] triggered by '%s' + '%s'.", pstPayload->zInputName, orxInput_GetBindingName(pstPayload->aeType[0], pstPayload->aeID[0]), orxInput_GetBindingName(pstPayload->aeType[1], pstPayload->aeID[1]));
            }
            else
            {
            orxLOG("[%s] triggered by '%s'.", pstPayload->zInputName, orxInput_GetBindingName(pstPayload->aeType[0], pstPayload->aeID[0]));
            }
            }
            }

            正如你所見,我們通過按下的是一個單鍵還是一個組合鍵來判斷展示不同的信息。

            我們僅使用了兩個首次輸入點(diǎn),因?yàn)槲覀冎?,我們的配置文件中沒有超過兩個的組合鍵。盡管orx支持最多四個組合鍵來做為一個單鍵。

            orxInput_GetBindingName() 函數(shù)給了我們一個輸入的文字顯示。

            注意:這些名稱在配置文件中也綁定到了對應(yīng)的按鍵上面。

            現(xiàn)在來看下如何處理這個事件

            if(_pstEvent->eType == orxEVENT_TYPE_FX)
            {
            orxFX_EVENT_PAYLOAD *pstPayload;
            orxOBJECT           *pstObject;
             
            pstPayload = _pstEvent->pstPayload;
            pstObject  = orxOBJECT(_pstEvent->hRecipient);
             
            switch(_pstEvent->eID)
            {
            case orxFX_EVENT_START:
            orxLOG("FX <%s>@<%s> has started!", pstPayload->zFXName, orxObject_GetName(pstObject));
             
            if(pstObject == pstSoldier)
            {
            // Locks it
            ((MyObject *)orxObject_GetUserData(pstObject))->bLock = orxTRUE;
            }
            break;
             
            case orxSOUND_EVENT_STOP:
            orxLOG("FX <%s>@<%s> has stoped!", pstPayload->zFXName, orxObject_GetName(pstObject));
             
            if(pstObject == pstSoldier)
            {
            // Unlocks it
            ((MyObject *)orxObject_GetUserData(pstObject))->bLock = orxFALSE;
            }
            break;
            }
            }

            在soldier上的動畫開始的時候,我們用自己的數(shù)據(jù)結(jié)構(gòu)來鎖定它,相應(yīng)的,停止的時候解鎖。

            看完了代碼部分,我們再去看看配置文件。

            首先看個簡單的特效 :盒子上旋轉(zhuǎn)的特效。

            [RotateLoopFX]
            SlotList  = Rotate
            Loop      = true
             
            [Rotate]
            Type        = rotation
            StartTime   = 0.0
            EndTime     = 2.0
            Curve       = sine
            Pow         = 2.0
            StartValue  = 0
            EndValue    = 360
             
            [Box]
            FXList = RotateLoopFX

            看到了吧,特效是在它創(chuàng)建之初直接應(yīng)用在盒對象上面的,而不是在代碼中。

            RotateLoopFX包含僅包含一個時間段(Rotate)并且一直循環(huán)(attribute Loop)

            然后定義Rotates時間段。時間的單位都是秒,角度的單位都是度。

            定義這個旋轉(zhuǎn)動畫的時候,我們使用了一個正弦曲線,讓他每兩秒旋轉(zhuǎn)360度。

            下面看下我們的搖擺特效。

            [WobbleFX]
            SlotList = Wobble
             
            [Wobble]
            Type          = scale
            StartTime     = 0.0
            EndTime       = 1.0
            Period        = 0.2
            Curve         = sine
            Amplification = 0.0
            StartValue    = (1.0, 1.0, 1.0)
            EndValue      = (2.0, 2.0, 1.0) ~ (6.0, 6.0, 1.0)

            我們修改了scale屬性,并賦予它一個StartValue(開始值)和EndValue(結(jié)束值)。
            他們都是用向量來表示的,如果不想使用任何各向異性的值(譯者注:專業(yè)名詞anisotropic(各向異性)去知道確切意思)的話,也可是使用float類型來表示。
            雖然看起來我們正在使用一個isotropic(各向同性)3)的值,這個EndValue也不過是一個隨機(jī)值。

            也就是說,它的X和Y部分可能是完全統(tǒng)統(tǒng)的隨機(jī)值!

            除此之外,我們使用了一個簡單的周期為0.2 秒的正弦曲線,它將會播放1秒鐘。

            看到了吧,我們將Amplification(增幅) 的值設(shè)為0,這就是說,隨著時間的推進(jìn),曲線的振幅會逐漸變低。注意:默認(rèn)的Amplification是1,表示不隨時間變化,保持穩(wěn)定,當(dāng)值大于1時,振幅就會加大;當(dāng)值小于1時,振幅就會減少。

            看看圓是如何運(yùn)動的。

            [CircleFX]
            SlotList        = CircleX#CircleY
            KeepInCache     = true
             
            [CircleX]
            Type            = position
            StartTime       = 0.0
            EndTime         = 1.0
            Curve           = sine
            StartValue      = (0.0, 0.0, 0.0)
            EndValue        = (-50.0, 0.0, 0.0)
            UseOrientation  = true
            UseScale        = true
             
            [CircleY@CircleX]
            Phase       = 0.25
            StartValue  = (0.0, -25.0, 0.0)
            EndValue    = (0.0, 25.0, 0.0)

            Here we need to use 2 slots that affects the position so as to be able to have a circle motion.
            The first slot, CircleX, will apply a sine curve on the X component of our object's position.
            The second slot, CircleY, will apply the same curve (with a different amplitude) on its Y component.

            我們使用兩個時間段來控制它的位置,這樣才能做出一個圓形的運(yùn)動。第一個時間段是CircleX,他將會應(yīng)用在對象的X軸向的振幅。第二個時間段CircleY,會產(chǎn)生一個同樣幅度的作用效果在Y軸上。

            如果我們不更改CircleY的相位,是不會發(fā)生圓形的運(yùn)動。

            現(xiàn)在假設(shè)一個正弦曲線,在初始值(StartValue)是相位0,準(zhǔn)備增加

            在相位0。25的時候,到達(dá)中間點(diǎn),將會繼續(xù)增加

            在相位0.5的時候,到達(dá)最高值(EndValue),準(zhǔn)備下降

            在相位0.75的時候,回到中間點(diǎn),繼續(xù)下降

            在相位1.0的時候,就跟相位0(StartValue)是一樣的了

            注意:這段描述正弦曲線的工作過程也同樣適用于三角形,但是卻不適用于線形。

            我們將略過大多數(shù)其他的特效,因?yàn)槟抢餂]有什么我們不知道的新知識了。

            但是我們還是要迅速的看一眼翻轉(zhuǎn)的特效,他將會向我們展示如何翻轉(zhuǎn)一個對象。就像Paper Mario Wii4)的風(fēng)格.

            [FlipFX]
            SlotList = Flip
             
            [Flip@Wobble]
            EndTime       = 0.5
            Period        = 1.0
            Amplification = 1.0
            EndValue      = (-1.0, 1.0, 1.0)

            看到了吧,我們很簡單的使用負(fù)值完成了這個效果! =)
            同時也注意到,我們給Period(周期)設(shè)了一個明確的值。
            我們選了一個兩倍于定義的正弦曲線的Period,這樣我們就只使用了正弦曲線的上升的那一半。同時,我們也將Amplification改回了1。(在”“Wobble”“中被設(shè)為0)

            資源

            源代碼: 07_FX.c

            配置文件: 07_FX.ini

            1) 九天注:這里作者有點(diǎn)穿越了,需要看下面的例子才能懂,作者定義了一個僅包含一個Bool值的結(jié)構(gòu)MyObject,這里的括號,作者打在了orxOBJECT后面,我費(fèi)解了N久,其實(shí)應(yīng)該修飾個性數(shù)據(jù),所以個人調(diào)整了一下。
            2) 九天注:本來一個對象可以同時有4個特效發(fā)生,這里作者僅僅是告訴你怎么使用“個性數(shù)據(jù)”才這樣做的,所以說僅僅具有教育意義。
            3) Z值不影響2D元素
            4) 九天注:Wii上的紙片馬里奧是個很出名的游戲,作者的意思就是這里的flip描述的就是那個游戲里面的風(fēng)格和效果
            posted @ 2010-07-07 08:58 IT菜鳥 閱讀(312) | 評論 (0)編輯 收藏

                 摘要: 綜述 這篇教程介紹了什么是特效以及如何創(chuàng)建它們   特效是建立在曲線集(線、三角形、矩形、)之上的,它們具有不同參數(shù)如:大小、旋度、位置、速度、顏色等。   特效在配置文件中設(shè)置,僅僅只需要一行代碼就可以在對象上使用這些特效。 8條任意類型的曲線組合在一起就可以形成一個特效。 在同一時間,可以有多達(dá)4個特效應(yīng)用于同一個對象上面。   特效可以使用絕對...  閱讀全文
            posted @ 2010-07-06 13:27 IT菜鳥 閱讀(411) | 評論 (0)編輯 收藏

            原文:http://orx-project.org/wiki/en/orx/tutorials/anim

            綜述

            這篇教程只涉及了orx中最基本的動畫使用。

            更多關(guān)于動畫的東西在這里 猛擊我.

            圖定義了動畫間所有可能的切換方式。動畫通過一個唯一的字符串來引用。所有的切換和動畫都是通過配置文件來創(chuàng)建的。
            當(dāng)一個動畫被請求的時候,引擎會計(jì)算從當(dāng)前動畫到請求動畫之間的鏈路
            如果這個鏈路存在,它會自動執(zhí)行。用戶將通過事件被告知動畫何時開始、停止、刪節(jié)或者循環(huán)。
            如果我們不能具體制定任何目標(biāo)動畫,引擎就會很自然的沿著屬性中定義的線路(走下去)。
            也有一個方法來越過這個尋路過程并且迅速的指向一個動畫。

            詳細(xì)內(nèi)容

            通常,我們先載入config file(配置文件),創(chuàng)建一個viewport,創(chuàng)建一個clock(時鐘)并且注冊Update(更新)函數(shù),最后創(chuàng)建一個主對象。
            請從之前的教程中獲得更多的信息。

            現(xiàn)在我們開始從代碼入手,我們將會從本頁的底部看到數(shù)據(jù)是如何組織的。
            在Update函數(shù)中,當(dāng)輸入GoLeft激活的時候會觸發(fā)WalkLeft動畫;GoRight激活的時候會觸發(fā)WalkRight函數(shù).
            當(dāng)沒有激活態(tài)的輸入時,我們會移除目標(biāo)動畫,讓這個圖保持一個自然的狀態(tài)

            if(orxInput_IsActive("GoRight"))
            {
              orxObject_SetTargetAnim(pstSoldier, 
            "WalkRight");
            }

            else if(orxInput_IsActive("GoLeft"))
            {
              orxObject_SetTargetAnim(pstSoldier, 
            "WalkLeft");
            }

            else
            {
              orxObject_SetTargetAnim(pstSoldier, orxNULL);
            }

            就是這樣!如何從任意當(dāng)前動畫切換到目標(biāo)動畫將會通過這個矢量圖來計(jì)算。如果需要切換,他們將會自動播放。
            注意:有很多的函數(shù)可以用高級的方法來控制動畫,但是99%的時候,這兩個函數(shù)是最常用的(orxObject_SetCurrentAnim() 和 orxObject_SetTargetAnim())。

            讓我們來看一下,動畫是如何通知我們發(fā)生了什么的(比如,就像同步語音一樣)。
            首先,我們要向動畫事件注冊回調(diào)函數(shù)。

            orxEvent_AddHandler(orxEVENT_TYPE_ANIM, EventHandler);

            好了!讓我們看下現(xiàn)在可以做什么了。
            我們說我們想要打印出對象中哪個動畫被播放、停止、剪切或者循環(huán)。需要寫一下的回調(diào)函數(shù)。

            orxSTATUS orxFASTCALL EventHandler(const orxEVENT *_pstEvent)
            {
            orxANIM_EVENT_PAYLOAD 
            *pstPayload;
             
            pstPayload 
            = (orxANIM_EVENT_PAYLOAD *)_pstEvent->pstPayload;
             
            switch(_pstEvent->eID)
            {
              
            case orxANIM_EVENT_START:
                orxLOG(
            "Animation <%s>@<%s> has started!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
                
            break;
             
              
            case orxANIM_EVENT_STOP:
                orxLOG(
            "Animation <%s>@<%s> has stoped!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
                
            break;
             
              
            case orxANIM_EVENT_CUT:
                orxLOG(
            "Animation <%s>@<%s> has been cut!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
                
            break;
             
              
            case orxANIM_EVENT_LOOP:
                orxLOG(
            "Animation <%s>@<%s> has looped!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
                
            break;
              }

             
              
            return orxSTATUS_SUCCESS;
            }

            先得到了事件的payload指針,因?yàn)槲覀冎皇窃谶@里傳遞動畫事件,所以我們可以安全的將payload 轉(zhuǎn)化為orxANIM_EVENT_PAYLOAD類型,它在 orxAnim.h中定義。
            如果我們在不同的事件(譯者注:原文是even 根據(jù)上下文推斷是作者拼寫錯誤)類型中調(diào)用了同一個回調(diào)函數(shù),我們首先將會查看是否得到了一個動畫事件,可以這樣做:

            if(_pstEvent->eType == orxEVENT_TYPE_ANIM)

            最后,事件接收者(_pstEvent→hRecipient)通常是播放動畫的那個對象。將其用宏orxOBJECT()來轉(zhuǎn)化為orOBJECT類型的對象。

            現(xiàn)在讓我們來看一眼數(shù)據(jù)方面的東西吧。
            首先,我們需要定義一個動畫集,它將會包含指定對象的動畫的整個矢量圖。
            動畫集在不會再內(nèi)存中重復(fù),并且它與矢量圖相對應(yīng)的多有動畫和鏈路。
            在上面這個例子中,我們又4個動畫和10條可以用來切換的鏈路。

            [AnimSet]
            AnimationList 
            = IdleRight#WalkRight#IdleLeft#WalkLeft
             
            LinkList 
            = IdleRightLoop#IdleRight2Left#IdleRight2WalkRight#WalkRightLoop#WalkRight2IdleRight#IdleLeftLoop#IdleLeft2Right#IdleLeft2WalkLeft#WalkLeftLoop#WalkLeft2IdleLeft

            現(xiàn)在我們來開始定義動畫!
            在這之前,為了減少文章篇幅,我們將要使用orx 配置文件的集成特性。
            先錨點(diǎn)的位置定義一項(xiàng)。
            也許你可能在對象教程中看到了錨點(diǎn)的相關(guān)知識,錨點(diǎn)的位置信息將會匹配世界中的對象。如果沒有確定的話,將會把左上角做為默認(rèn)值。
            錨點(diǎn)可以通過語義關(guān)鍵字來確定,如: top, bottom, center, left and right也可以通過實(shí)際的值來確定。

            [Pivot]
            Pivot 
            = (15.031.00.0)

            現(xiàn)在,我們來定義從錨點(diǎn)繼承過來的圖像對象。在我們這個例子中,它是一個位圖,,包含了對象中所有的幀。因此基本的屬性就是 位圖文件的名字和一幀的大小。

            [FullGraphic@Pivot]
            Texture     
            = ../../data/anim/soldier_full.png
            TextureSize 
            = (32320)

            創(chuàng)建幀的準(zhǔn)備工作都做好了。
            讓我們定義所有都是right-oriented的動畫。一共6個。

            [AnimRight1@FullGraphic]
            TextureCorner 
            = (000)
             
            [AnimRight2@FullGraphic]
            TextureCorner 
            = (0320)
             
            [AnimRight3@FullGraphic]
            TextureCorner 
            = (0640)
             
            [AnimRight4@FullGraphic]
            TextureCorner 
            = (3200)
             
            [AnimRight5@FullGraphic]
            TextureCorner 
            = (32320)
             
            [AnimRight6@FullGraphic]
            TextureCorner 
            = (32640)


            看到了吧,他們?nèi)祭^承于FullGraphic,唯一能區(qū)分他們的屬性就是TextureCorner. 好,我們已經(jīng)定義完了所有的圖形對象(他們載入的時候會轉(zhuǎn)變?yōu)閛rxGraphic結(jié)構(gòu)),下面定義動畫本身。讓我們從ideright動畫開始說起,它包含一個單幀并持續(xù)0.1秒。

            [IdleRight]
            KeyData1      
            = AnimRight6
            KeyDuration1  
            = 0.1


            太簡單了,來嘗試下第二個:

            [WalkRight]
            DefaultKeyDuration  
            = 0.1
            KeyData1            
            = AnimRight1
            KeyData2            
            = AnimRight2
            KeyData3            
            = AnimRight3
            KeyData4            
            = AnimRight4
            KeyData5            
            = AnimRight5
            KeyData6            
            = AnimRight6


            當(dāng)我們使用DefaultKeyDuration屬性同時為所有的幀定義時并不是很難。我們可以像idleright動畫中所做的那樣,通過一個確定的鍵值來覆蓋任意一幀。我們?nèi)绶ㄅ谥谱龀鰈eft-oriented動畫。通常我們使用翻轉(zhuǎn)圖形對象時,我們將會在代碼運(yùn)行中做這件事。但是那不是我們的目的!讓我們來用與前面那個完全不同的方法來實(shí)現(xiàn)它!只有鏈路沒有提到了讓我們添上它?;镜逆溌方Y(jié)構(gòu)非常簡單,我們指定源動畫和目的動畫。

            [IdleRightLoop]
            Source      
            = IdleRight
            Destination 
            = IdleRight

            這里,我們有跟之前一樣的基本信息,但是多了一個immediate屬性做為鍵值。這就是說,當(dāng)我們處于IdleRight動畫時,并且目標(biāo)是WalkRight,我們不必等到IdleRight完成,將直接完成這個動作,這就給了我們一個剪切動畫的方法。 正如在代碼中看到的一樣。當(dāng)我們已經(jīng)開始行走的時候,沒有顯式的調(diào)用空閑動畫,這是怎么做到的?看下從WalkRight到IdleRight的鏈路。

            [IdleRight2WalkRight]
            Source      
            = IdleRight
            Destination 
            = WalkRight
            Property    
            = immediate


            當(dāng)我們再WalkRight狀態(tài)并且移除了目標(biāo)動畫,引擎不得按照自然的路線走下去。這個意思是說,它會選取高優(yōu)先級的鏈路。默認(rèn)的優(yōu)先級是8,它的范圍是0到15.在這里,優(yōu)先級是9,也就是說當(dāng)我們沒有目標(biāo)的時候,就會選取它。它將會帶我們回到IdleRight狀態(tài)。這里也加了immdiate屬性,這樣,我們就不必等“走”這個循環(huán)完事再回到“空閑”
             
            注意:這只是一個非?;镜膱D,用來闡述基本的動畫切換過程,但是這個系統(tǒng)的擴(kuò)展性很高。比如假設(shè)這樣一個場景:你想從坐的狀態(tài)變?yōu)樽叩臓顟B(tài),中間沒有別的過度。隨著游戲的開發(fā),你可能覺得在這兩個狀態(tài)間加一個站立的狀態(tài)會比較好。這時,你只需要再配置文件中添加這多出來的一步,而整個代碼文件都不用更改。

            資源:

            源文件: 04_Anim.c
            配置文件: 04_Anim.ini
            posted @ 2010-07-05 23:21 IT菜鳥 閱讀(556) | 評論 (1)編輯 收藏

            僅列出標(biāo)題
            共7頁: 1 2 3 4 5 6 7 
            久久久久久久99精品免费观看| 一本色道久久88加勒比—综合| 91亚洲国产成人久久精品网址| 久久99精品久久久久婷婷| 久久久久久狠狠丁香| 久久涩综合| 久久亚洲精品国产精品| 久久美女网站免费| 女人高潮久久久叫人喷水| 久久综合噜噜激激的五月天| 国产福利电影一区二区三区久久久久成人精品综合| 亚洲国产精品久久久久婷婷老年| 伊人久久一区二区三区无码| 久久91亚洲人成电影网站| 色综合久久夜色精品国产| 久久婷婷国产麻豆91天堂| 久久伊人五月丁香狠狠色| 国产成人久久精品二区三区| 色狠狠久久AV五月综合| 亚洲欧美日韩久久精品| 国产精品久久影院| 无码超乳爆乳中文字幕久久| 精品久久国产一区二区三区香蕉 | 久久ZYZ资源站无码中文动漫| 国产精品免费久久| AV色综合久久天堂AV色综合在| 四虎久久影院| 日本免费久久久久久久网站| 亚洲精品高清国产一线久久| 区亚洲欧美一级久久精品亚洲精品成人网久久久久| 无码人妻久久一区二区三区免费丨| 久久九色综合九色99伊人| 国产精品久久99| 国产成人久久精品激情| 精品熟女少妇a∨免费久久| 亚洲欧洲日产国码无码久久99| 日韩电影久久久被窝网| 久久九九久精品国产免费直播| 91久久精品电影| 91秦先生久久久久久久| 韩国三级中文字幕hd久久精品 |