青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Where there is a dream ,there is hope

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

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

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

綜述

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

更多關于動畫的東西在這里 猛擊我.

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

詳細內容

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

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

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

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

else
{
  orxObject_SetTargetAnim(pstSoldier, orxNULL);
}

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

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

orxEvent_AddHandler(orxEVENT_TYPE_ANIM, EventHandler);

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

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指針,因為我們只是在這里傳遞動畫事件,所以我們可以安全的將payload 轉化為orxANIM_EVENT_PAYLOAD類型,它在 orxAnim.h中定義。
如果我們在不同的事件(譯者注:原文是even 根據上下文推斷是作者拼寫錯誤)類型中調用了同一個回調函數,我們首先將會查看是否得到了一個動畫事件,可以這樣做:

if(_pstEvent->eType == orxEVENT_TYPE_ANIM)

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

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

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

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

[Pivot]
Pivot 
= (15.031.00.0)

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

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

創建幀的準備工作都做好了。
讓我們定義所有都是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)


看到了吧,他們全都繼承于FullGraphic,唯一能區分他們的屬性就是TextureCorner. 好,我們已經定義完了所有的圖形對象(他們載入的時候會轉變為orxGraphic結構),下面定義動畫本身。讓我們從ideright動畫開始說起,它包含一個單幀并持續0.1秒。

[IdleRight]
KeyData1      
= AnimRight6
KeyDuration1  
= 0.1


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

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


當我們使用DefaultKeyDuration屬性同時為所有的幀定義時并不是很難。我們可以像idleright動畫中所做的那樣,通過一個確定的鍵值來覆蓋任意一幀。我們如法炮制做出left-oriented動畫。通常我們使用翻轉圖形對象時,我們將會在代碼運行中做這件事。但是那不是我們的目的!讓我們來用與前面那個完全不同的方法來實現它!只有鏈路沒有提到了讓我們添上它。基本的鏈路結構非常簡單,我們指定源動畫和目的動畫。

[IdleRightLoop]
Source      
= IdleRight
Destination 
= IdleRight

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

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


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

資源:

源文件: 04_Anim.c
配置文件: 04_Anim.ini
posted on 2010-07-05 23:21 IT菜鳥 閱讀(570) 評論(1)  編輯 收藏 引用 所屬分類: 翻譯文章

Feedback

# re: Orx教程--4.動畫 2010-07-06 20:52 term papers
Not every single thing would be related with custom term papers I’m having, thus, guys still shouldfind essays.   回復  更多評論
  


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美精品乱码久久久久久按摩| 亚洲福利视频在线| 国产午夜精品在线| 国产精品一二一区| 国产欧美日韩91| 伊人春色精品| 亚洲美女免费视频| 中文在线资源观看网站视频免费不卡| 日韩视频在线免费观看| 一二三区精品福利视频| 羞羞漫画18久久大片| 久久久久久久综合狠狠综合| 国产日韩欧美高清免费| 激情成人在线视频| 一区二区三区高清| 欧美专区日韩专区| 欧美激情1区2区3区| 99热这里只有精品8| 欧美综合国产| 欧美区二区三区| 国产亚洲一级高清| av不卡在线看| 欧美尤物一区| 亚洲激情视频网| 亚洲自拍偷拍一区| 欧美成人r级一区二区三区| 国产精品免费电影| 亚洲国产日韩在线一区模特| 亚洲欧美视频| 亚洲国产精品123| 亚洲综合色丁香婷婷六月图片| 米奇777超碰欧美日韩亚洲| 国产精品国产三级国产专播精品人 | 久久久久久日产精品| 欧美国产日韩一区二区在线观看| 欧美视频免费在线观看| 在线观看成人av电影| 午夜亚洲福利在线老司机| 亚洲国产专区校园欧美| 久久岛国电影| 国产精品男gay被猛男狂揉视频| 最近中文字幕日韩精品| 久久美女性网| 亚洲欧美国产高清| 欧美日韩免费观看一区| 亚洲国产欧美在线| 久久综合图片| 亚洲欧美国产一区二区三区| 欧美裸体一区二区三区| 伊人久久婷婷色综合98网| 久久成人亚洲| 亚洲欧美资源在线| 国产亚洲欧洲一区高清在线观看| 中文亚洲免费| 99在线精品视频| 欧美日韩在线播| 亚洲小视频在线观看| 亚洲美女淫视频| 欧美日韩妖精视频| 亚洲欧美卡通另类91av| 亚洲视频在线观看免费| 国产精品三级视频| 久久国产精品久久国产精品 | 亚洲精品欧美日韩专区| 另类图片国产| 久久中文字幕一区| 亚洲国产1区| 亚洲精品久久久久久久久久久久久 | 91久久极品少妇xxxxⅹ软件| 欧美va亚洲va日韩∨a综合色| 欧美中文字幕| 亚洲高清精品中出| 亚洲精品乱码久久久久久久久| 欧美激情一区二区三区蜜桃视频| 91久久黄色| 99精品视频一区| 国产精品狼人久久影院观看方式| 午夜在线精品偷拍| 久久精品国产清高在天天线| 在线观看一区视频| 亚洲日本成人在线观看| 国产精品久久九九| 久久久久久免费| 欧美成人精品1314www| 一区二区三区视频在线播放| 亚洲综合色噜噜狠狠| 亚洲电影专区| 亚洲精品你懂的| 欧美日韩精品免费看| 欧美在线3区| 欧美成人黄色小视频| 欧美亚洲一区在线| 免费成人高清视频| 性亚洲最疯狂xxxx高清| 巨乳诱惑日韩免费av| 午夜精品一区二区三区在线视| 久久亚洲影音av资源网| 中国亚洲黄色| 久久午夜精品| 欧美一区二区三区精品 | 午夜精品久久| 亚洲乱码国产乱码精品精可以看 | 亚洲欧美日韩另类| 亚洲美女免费视频| 欧美一区综合| 亚洲一区999| 美女尤物久久精品| 久久久久久久精| 国产精品久久国产三级国电话系列 | 亚洲国产精品电影| 亚洲主播在线| 国产精品久久久久毛片大屁完整版 | 欧美国产日韩xxxxx| 国产精品丝袜xxxxxxx| 亚洲欧洲日产国产综合网| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 久久xxxx| 亚洲一区二区视频在线观看| 欧美成人69av| 你懂的视频一区二区| 国产精品国产三级国产aⅴ浪潮| 亚洲国产综合91精品麻豆| 一色屋精品视频在线观看网站| 亚洲你懂的在线视频| 亚洲一区二区在线看| 欧美日韩一区二区三区在线看| 亚洲大胆美女视频| 亚洲国产一区二区视频| 久久综合狠狠综合久久综青草| 久久久久久久综合色一本| 国产日韩欧美不卡| 亚洲欧美日韩在线| 久久精品99无色码中文字幕 | 好吊色欧美一区二区三区四区| 亚洲自拍偷拍一区| 亚洲欧美资源在线| 国产精品你懂的| 亚洲在线中文字幕| 欧美在线亚洲一区| 国内精品视频在线播放| 久久精品成人一区二区三区蜜臀| 久久精彩免费视频| 黄色一区二区三区四区| 老鸭窝91久久精品色噜噜导演| 欧美成年人视频| 亚洲精品国久久99热| 欧美人成免费网站| 一区二区免费在线观看| 亚洲欧美一区二区三区在线 | 欧美日韩在线综合| 亚洲亚洲精品在线观看| 欧美中文字幕在线视频| 精品51国产黑色丝袜高跟鞋| 久久字幕精品一区| 日韩午夜高潮| 欧美一区二区在线看| 在线精品在线| 欧美日韩一区二区免费在线观看| 亚洲影院免费观看| 鲁大师成人一区二区三区| 亚洲开发第一视频在线播放| 国产精品免费看| 久久久国产一区二区三区| 亚洲国产乱码最新视频| 亚洲综合第一页| 狠色狠色综合久久| 欧美日韩免费观看一区| 久久精品国产v日韩v亚洲| 91久久精品国产91性色| 国产精品有限公司| 欧美v国产在线一区二区三区| 99国产精品私拍| 久久一区亚洲| 亚洲视频一区二区免费在线观看| 国产欧美日韩在线观看| 欧美高清成人| 欧美一二三视频| 亚洲精品偷拍| 久久久久久久久久码影片| 一区二区三区国产在线| 国产亚洲精品久久久久久| 欧美精品日韩一区| 久久福利视频导航| 一本色道久久综合亚洲精品按摩 | 国产精品欧美精品| 欧美激情久久久久久| 欧美一区三区三区高中清蜜桃| 亚洲区免费影片| 麻豆精品在线视频| 亚洲欧美日韩国产| 亚洲精品偷拍| 在线欧美亚洲| 国内精品久久久久久久影视麻豆| 欧美巨乳在线| 欧美成人精品1314www| 久久国产高清| 欧美一区三区二区在线观看| 一区二区三区精品在线| 亚洲精品一区在线| 亚洲日本欧美|