




已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
DirectX技術(shù),2D游戲框架之CAnimationSprite,概述,CAnimationSprite類用于描述動(dòng)畫精靈。動(dòng)畫精靈也是一種精靈,只是表示精靈的紋理不是固定的一幀,而是由若干幀組成。動(dòng)畫精靈在表現(xiàn)角色動(dòng)作方面特別有用,比如角色的行走、戰(zhàn)斗等動(dòng)作都不是用固定的一幀圖像能表現(xiàn)出來(lái)的,有了動(dòng)畫精靈,就可以把多幅圖像按照指定的速度播放出來(lái),這樣能較好地表達(dá)角色的動(dòng)作行為。下圖就是一幅角色的四方向行走圖:,在上圖中,從上到下總共4行,代表了角色向下、向左、向右、向上行走。每個(gè)方向的行走動(dòng)畫都是由4幅大小相同的圖片組成。在程序中,只要按一定的速度,循環(huán)播放一個(gè)方向的4幅圖片,就可以形成角色行走的動(dòng)畫。 前面介紹的CSprite類已經(jīng)具有了將紋理圖片中指定的部分顯示在屏幕上指定位置的能力。那么,我們只需要擴(kuò)展CSprite類,為其添加播放控制部分的功能即可。播放控制主要體現(xiàn)在速度控制和紋理坐標(biāo)截取兩方面。 下面我們以表格的形式來(lái)描述動(dòng)畫精靈的主要屬性和行為:,具體定義見(jiàn)CAnimationSprite.h,部分實(shí)現(xiàn)細(xì)節(jié),Update函數(shù) CSprite類有一個(gè)虛函數(shù)Update,這個(gè)函數(shù)是每幀都會(huì)被調(diào)用的,用以控制精靈每幀的行為。對(duì)于CSprite類來(lái)說(shuō),它的行為模式是簡(jiǎn)單的,每幀只需要負(fù)責(zé)把一張固定的圖像渲染到屏幕上即可,所以該函數(shù)在CSprite里是空操作。而動(dòng)畫精靈則不同,它需要在每幀里計(jì)算自己需要顯示哪一幀圖片。這個(gè)計(jì)算包含兩方面的意思:一是計(jì)算時(shí)間,以決定是否該更新到下一幀;二是如果需要更新,下一幀的紋理坐標(biāo)如何計(jì)算。所以CAnimationSprite類需要重寫Update函數(shù),在其中主要完成時(shí)間計(jì)算相關(guān)工作,并調(diào)用另一個(gè)函數(shù)SetFrame來(lái)計(jì)算下一幀的紋理坐標(biāo)。,在CAnimationSprite類定義的成員變量fInterval使用來(lái)記錄設(shè)定的動(dòng)畫精靈幀頻所對(duì)應(yīng)的時(shí)間間隔。其計(jì)算方法是:fInterval = 1.0 / nFps; 其中nFps是在構(gòu)造時(shí)傳遞進(jìn)來(lái)的實(shí)參,表示希望動(dòng)畫精靈播放的幀頻。有了這個(gè)時(shí)間間隔,在Update函數(shù)里要控制播放速度就比較簡(jiǎn)單了。其方法是:用fSinceLastFrame成員變量記錄自從上次更新后到本幀累積流逝的時(shí)間,如果這個(gè)時(shí)間大于fInterval,則更新,并把fSinceLastFrame重置為0;否則,則不需要更新,如下:,void CAnimationSprite:Update(float fDeltaTime) /fDeltaTime是從上幀到本幀系統(tǒng)所流逝的時(shí)間 if(!bPlaying) /如果當(dāng)前設(shè)置為不播放,則不作任何操作 return; fSinceLastFrame += fDeltaTime; /加上系統(tǒng)流逝的時(shí)間 if(fSinceLastFrame = fInterval) /如果大于設(shè)定的時(shí)間間隔 fSinceLastFrame = 0; SetFrame(nCurFrame+nDelta); /調(diào)用SetFrame函數(shù)/設(shè)置下一幀的紋理坐標(biāo), /其中nDelta可以是1,也可以是-1,分別表示順序播放和逆序播放 ,SetFrame函數(shù),SetFrame函數(shù)計(jì)算指定的幀應(yīng)該怎樣在紋理圖片上截圖。在計(jì)算截圖時(shí),應(yīng)該按照從左到右,從上到下的順序截取圖片,如下圖:,在上圖中,用紅綠藍(lán)黃和數(shù)字1、2、3、4標(biāo)出了截取紋理的順序,1、2、3、4這4幅圖片的截取順序是沒(méi)有疑問(wèn)的,但是如果現(xiàn)在要截取第5幅圖,應(yīng)該怎樣計(jì)算坐標(biāo)呢?截取第5幅圖的坐標(biāo)怎么計(jì)算,要看總幀數(shù)的設(shè)定。如果總幀數(shù)等于4,那么截取到第一行最后一幀圖時(shí),就已經(jīng)取完了幀序列的所有圖片,如果再取第5幀,那么就應(yīng)該回到幀序列的第一幀重新開始下一輪循環(huán),如果總幀數(shù)大于4,比如等于16,那么到第5幀時(shí),這一個(gè)播放序列沒(méi)有完成,還必須繼續(xù)從圖片的下一行取圖,也就是第二行的第一幅圖,如下圖所示:,void CAnimationSprite:SetFrame(int n) /參數(shù)n代表設(shè)置第幾幀 int tx1, ty1, tx2, ty2; bool bX, bY, bHS; int ncols = nTexWidth / width; /計(jì)算紋理圖片分為幾列 n = n % nFrames; /將n對(duì)總幀數(shù)取模 /如果n0,將n+nFrames, /時(shí)期取值范圍落在0,nFrames之間 if(n 0) n = nFrames + n; nCurFrame = n; /將當(dāng)前幀設(shè)置為n / 下面通過(guò)幀n計(jì)算紋理坐標(biāo) ty1 = ty; tx1 = txStart + n*width;,if(tx1 nTexWidth - width) /如果跨行 n -= (nTexWidth -tx) / width; /n在下一行應(yīng)該取
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 花店企劃管理方案(3篇)
- 跨境電商股權(quán)轉(zhuǎn)讓與全球市場(chǎng)拓展協(xié)議
- 民宿規(guī)劃方案(3篇)
- 園區(qū)監(jiān)控改造方案(3篇)
- 股東分紅權(quán)轉(zhuǎn)讓與農(nóng)業(yè)產(chǎn)業(yè)化項(xiàng)目合作協(xié)議
- 醫(yī)院食堂服務(wù)采購(gòu)方案(3篇)
- 金融控股股份公司股權(quán)投資與風(fēng)險(xiǎn)控制合同
- 中介物品清點(diǎn)方案(3篇)
- 小區(qū)招牌改建方案(3篇)
- 股權(quán)融資平臺(tái)股權(quán)轉(zhuǎn)讓代理合同
- 美團(tuán)配送站長(zhǎng)述職報(bào)告
- 預(yù)防接種知識(shí)講座內(nèi)容
- 語(yǔ)文學(xué)科核心素養(yǎng)
- 做賬實(shí)操-數(shù)據(jù)處理和存儲(chǔ)服務(wù)業(yè)的賬務(wù)處理
- 礦產(chǎn)資源儲(chǔ)量報(bào)告編制和評(píng)審中常見(jiàn)問(wèn)題及其處理意見(jiàn)
- 2024年清理道路塌方協(xié)議書模板
- 河南省鄭州市管城回族區(qū)2023-2024學(xué)年五年級(jí)下學(xué)期期末數(shù)學(xué)試卷
- GB/T 24067-2024溫室氣體產(chǎn)品碳足跡量化要求和指南
- GB 44495-2024汽車整車信息安全技術(shù)要求
- 人教版五年級(jí)3《長(zhǎng)方體和正方體》 單元整體作業(yè)設(shè)計(jì)
- 2024年全國(guó)財(cái)會(huì)知識(shí)競(jìng)賽考試題庫(kù)(濃縮500題)
評(píng)論
0/150
提交評(píng)論