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

Where there is a dream ,there is hope

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

常用鏈接

留言簿(1)

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

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

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

綜述

這篇教程只涉及了orx中最基本的動(dòng)畫使用。

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

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

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

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

現(xiàn)在我們開始從代碼入手,我們將會(huì)從本頁(yè)的底部看到數(shù)據(jù)是如何組織的。
在Update函數(shù)中,當(dāng)輸入GoLeft激活的時(shí)候會(huì)觸發(fā)WalkLeft動(dòng)畫;GoRight激活的時(shí)候會(huì)觸發(fā)WalkRight函數(shù).
當(dāng)沒有激活態(tài)的輸入時(shí),我們會(huì)移除目標(biāo)動(dòng)畫,讓這個(gè)圖保持一個(gè)自然的狀態(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)前動(dòng)畫切換到目標(biāo)動(dòng)畫將會(huì)通過這個(gè)矢量圖來(lái)計(jì)算。如果需要切換,他們將會(huì)自動(dòng)播放。
注意:有很多的函數(shù)可以用高級(jí)的方法來(lái)控制動(dòng)畫,但是99%的時(shí)候,這兩個(gè)函數(shù)是最常用的(orxObject_SetCurrentAnim() 和 orxObject_SetTargetAnim())。

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

orxEvent_AddHandler(orxEVENT_TYPE_ANIM, EventHandler);

好了!讓我們看下現(xiàn)在可以做什么了。
我們說我們想要打印出對(duì)象中哪個(gè)動(dòng)畫被播放、停止、剪切或者循環(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)槲覀冎皇窃谶@里傳遞動(dòng)畫事件,所以我們可以安全的將payload 轉(zhuǎn)化為orxANIM_EVENT_PAYLOAD類型,它在 orxAnim.h中定義。
如果我們?cè)诓煌氖录ㄗg者注:原文是even 根據(jù)上下文推斷是作者拼寫錯(cuò)誤)類型中調(diào)用了同一個(gè)回調(diào)函數(shù),我們首先將會(huì)查看是否得到了一個(gè)動(dòng)畫事件,可以這樣做:

if(_pstEvent->eType == orxEVENT_TYPE_ANIM)

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

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

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

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

[Pivot]
Pivot 
= (15.031.00.0)

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

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

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

[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)定義完了所有的圖形對(duì)象(他們載入的時(shí)候會(huì)轉(zhuǎn)變?yōu)閛rxGraphic結(jié)構(gòu)),下面定義動(dòng)畫本身。讓我們從ideright動(dòng)畫開始說起,它包含一個(gè)單幀并持續(xù)0.1秒。

[IdleRight]
KeyData1      
= AnimRight6
KeyDuration1  
= 0.1


太簡(jiǎn)單了,來(lái)嘗試下第二個(gè):

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


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

[IdleRightLoop]
Source      
= IdleRight
Destination 
= IdleRight

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

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


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

資源:

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

Feedback

# re: Orx教程--4.動(dòng)畫 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.   回復(fù)  更多評(píng)論
  


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   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>
            性色av香蕉一区二区| 欧美一激情一区二区三区| 国产精品av久久久久久麻豆网 | 亚洲日本无吗高清不卡| 欧美亚洲一区在线| 欧美一区二区三区婷婷月色 | 午夜性色一区二区三区免费视频| 亚洲香蕉网站| 欧美影片第一页| 久久午夜色播影院免费高清| 欧美成人免费全部| 亚洲精品国产精品乱码不99按摩| 日韩亚洲欧美一区| 亚洲欧美日韩电影| 欧美1区视频| 欧美午夜激情小视频| 国产日产欧美精品| 亚洲人屁股眼子交8| 一区二区久久久久| 久久久av水蜜桃| 欧美激情一区二区在线| 中文亚洲字幕| 美乳少妇欧美精品| 国产精品日韩专区| 亚洲国产一区二区三区a毛片 | 欧美日韩色综合| 国产日韩精品电影| 亚洲精品一区二区三区av| 亚洲欧美日韩在线播放| 亚洲第一成人在线| 性欧美videos另类喷潮| 欧美精品久久久久久久久久| 国产亚洲二区| 99这里只有久久精品视频| 欧美专区18| 夜夜嗨av色综合久久久综合网| 久久美女性网| 国产麻豆午夜三级精品| 在线视频你懂得一区| 欧美韩日一区| 久久精品免视看| 国产欧美一区视频| 亚洲欧美伊人| 日韩视频专区| 欧美精品久久久久a| 在线免费观看日本欧美| 欧美一区二区三区日韩| 欧美日韩黄色大片| 在线观看视频一区二区欧美日韩 | 国产精品香蕉在线观看| 亚洲人成网在线播放| 久久色在线播放| 亚洲欧洲av一区二区| 欧美午夜精品伦理| 日韩一二三区视频| 亚洲国产你懂的| 蜜桃av噜噜一区二区三区| 樱桃成人精品视频在线播放| 久久久久国产一区二区| 欧美亚洲三区| 国产一区二区三区久久悠悠色av | 午夜精品久久久久久久久久久久| 亚洲二区精品| 欧美成人黄色小视频| 在线日韩欧美视频| 欧美成人精精品一区二区频| 久久亚洲精品欧美| 尤物yw午夜国产精品视频明星| 欧美在线视频免费播放| 欧美亚洲日本网站| 国语自产在线不卡| 欧美国产高清| 欧美激情一区二区在线| 亚洲人永久免费| 亚洲美女中文字幕| 国产精品美女黄网| 久久精精品视频| 麻豆精品一区二区综合av| 最新日韩精品| 亚洲麻豆视频| 国产精品一二三| 麻豆精品精华液| 玖玖玖国产精品| 一区二区三区毛片| 亚洲免费网站| 18成人免费观看视频| 亚洲破处大片| 国产精品毛片| 欧美/亚洲一区| 欧美网站大全在线观看| 久久电影一区| 免费在线观看成人av| 亚洲午夜激情网页| 久久精品国产久精国产思思| 亚洲精品久久7777| 午夜精品国产| 一区二区精品| 欧美在线观看你懂的| 亚洲精品免费观看| 欧美一区二区播放| 亚洲精品视频在线| 欧美一二三区精品| 99天天综合性| 久久精品中文字幕一区| 欧美日韩视频在线| 久久久精品国产免大香伊| 久久躁日日躁aaaaxxxx| 亚洲午夜电影在线观看| 卡通动漫国产精品| 性色av一区二区三区在线观看 | 欧美在线在线| 欧美日韩高清区| 久久婷婷人人澡人人喊人人爽| 欧美日韩国产区一| 欧美成人午夜影院| 国产日韩欧美亚洲| 亚洲午夜91| 中文日韩电影网站| 久久久久网站| 久久精品最新地址| 国产精品萝li| 一本久久综合亚洲鲁鲁| 亚洲精品资源| 猛干欧美女孩| 久热精品在线视频| 国产在线国偷精品产拍免费yy| 中文在线不卡视频| 在线视频欧美精品| 欧美日韩高清在线一区| 亚洲国产女人aaa毛片在线| 亚洲丶国产丶欧美一区二区三区 | 国产一在线精品一区在线观看| 亚洲午夜91| 亚洲字幕在线观看| 国产精品超碰97尤物18| 99在线精品观看| 亚洲天堂成人在线视频| 欧美裸体一区二区三区| 亚洲国产精品尤物yw在线观看| 在线观看国产精品网站| 久久久国际精品| 美国三级日本三级久久99| 国产揄拍国内精品对白| 久久久久久久久久看片| 美女诱惑一区| 在线看成人片| 欧美国产先锋| 99精品久久| 午夜精品福利视频| 国产精品亚洲片夜色在线| 欧美一区深夜视频| 久久天天躁狠狠躁夜夜爽蜜月| 狠狠色综合播放一区二区| 久久亚洲精选| 亚洲精品一区二区在线| 亚洲伊人久久综合| 国产亚洲视频在线观看| 久久亚洲春色中文字幕| 亚洲国产专区校园欧美| 亚洲综合二区| 国产一区亚洲一区| 美日韩精品免费观看视频| 亚洲精品三级| 欧美在线一区二区| 亚洲精选在线| 国产精品亚发布| 麻豆精品网站| 亚洲欧美在线aaa| 亚洲另类黄色| 国产精品一卡二| 男女视频一区二区| 亚洲永久字幕| 亚洲第一网站| 欧美一二三区精品| 最新日韩在线| 国产欧美一区二区三区另类精品 | 亚洲欧美制服另类日韩| 在线成人小视频| 欧美视频免费在线| 久久久亚洲精品一区二区三区| 亚洲国产高清高潮精品美女| 亚洲欧美中文另类| 亚洲精品少妇网址| 伊人精品久久久久7777| 欧美日韩在线三级| 开心色5月久久精品| 亚洲欧美日本伦理| 亚洲人精品午夜| 美女诱惑黄网站一区| 小处雏高清一区二区三区| 亚洲国产精品成人综合色在线婷婷| 欧美三级中文字幕在线观看| 久久综合久久久久88| 亚洲欧美成人一区二区在线电影| 亚洲狠狠婷婷| 欧美大片免费| 老牛嫩草一区二区三区日本| 欧美一区二区三区在线观看视频| 一本色道久久综合亚洲91| 在线欧美三区|