




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
DirectX技術(shù),2D游戲框架之CAnimationSprite,概述,CAnimationSprite類用于描述動畫精靈。動畫精靈也是一種精靈,只是表示精靈的紋理不是固定的一幀,而是由若干幀組成。動畫精靈在表現(xiàn)角色動作方面特別有用,比如角色的行走、戰(zhàn)斗等動作都不是用固定的一幀圖像能表現(xiàn)出來的,有了動畫精靈,就可以把多幅圖像按照指定的速度播放出來,這樣能較好地表達(dá)角色的動作行為。下圖就是一幅角色的四方向行走圖:,在上圖中,從上到下總共4行,代表了角色向下、向左、向右、向上行走。每個方向的行走動畫都是由4幅大小相同的圖片組成。在程序中,只要按一定的速度,循環(huán)播放一個方向的4幅圖片,就可以形成角色行走的動畫。 前面介紹的CSprite類已經(jīng)具有了將紋理圖片中指定的部分顯示在屏幕上指定位置的能力。那么,我們只需要擴展CSprite類,為其添加播放控制部分的功能即可。播放控制主要體現(xiàn)在速度控制和紋理坐標(biāo)截取兩方面。 下面我們以表格的形式來描述動畫精靈的主要屬性和行為:,具體定義見CAnimationSprite.h,部分實現(xiàn)細(xì)節(jié),Update函數(shù) CSprite類有一個虛函數(shù)Update,這個函數(shù)是每幀都會被調(diào)用的,用以控制精靈每幀的行為。對于CSprite類來說,它的行為模式是簡單的,每幀只需要負(fù)責(zé)把一張固定的圖像渲染到屏幕上即可,所以該函數(shù)在CSprite里是空操作。而動畫精靈則不同,它需要在每幀里計算自己需要顯示哪一幀圖片。這個計算包含兩方面的意思:一是計算時間,以決定是否該更新到下一幀;二是如果需要更新,下一幀的紋理坐標(biāo)如何計算。所以CAnimationSprite類需要重寫Update函數(shù),在其中主要完成時間計算相關(guān)工作,并調(diào)用另一個函數(shù)SetFrame來計算下一幀的紋理坐標(biāo)。,在CAnimationSprite類定義的成員變量fInterval使用來記錄設(shè)定的動畫精靈幀頻所對應(yīng)的時間間隔。其計算方法是:fInterval = 1.0 / nFps; 其中nFps是在構(gòu)造時傳遞進(jìn)來的實參,表示希望動畫精靈播放的幀頻。有了這個時間間隔,在Update函數(shù)里要控制播放速度就比較簡單了。其方法是:用fSinceLastFrame成員變量記錄自從上次更新后到本幀累積流逝的時間,如果這個時間大于fInterval,則更新,并把fSinceLastFrame重置為0;否則,則不需要更新,如下:,void CAnimationSprite:Update(float fDeltaTime) /fDeltaTime是從上幀到本幀系統(tǒng)所流逝的時間 if(!bPlaying) /如果當(dāng)前設(shè)置為不播放,則不作任何操作 return; fSinceLastFrame += fDeltaTime; /加上系統(tǒng)流逝的時間 if(fSinceLastFrame = fInterval) /如果大于設(shè)定的時間間隔 fSinceLastFrame = 0; SetFrame(nCurFrame+nDelta); /調(diào)用SetFrame函數(shù)/設(shè)置下一幀的紋理坐標(biāo), /其中nDelta可以是1,也可以是-1,分別表示順序播放和逆序播放 ,SetFrame函數(shù),SetFrame函數(shù)計算指定的幀應(yīng)該怎樣在紋理圖片上截圖。在計算截圖時,應(yīng)該按照從左到右,從上到下的順序截取圖片,如下圖:,在上圖中,用紅綠藍(lán)黃和數(shù)字1、2、3、4標(biāo)出了截取紋理的順序,1、2、3、4這4幅圖片的截取順序是沒有疑問的,但是如果現(xiàn)在要截取第5幅圖,應(yīng)該怎樣計算坐標(biāo)呢?截取第5幅圖的坐標(biāo)怎么計算,要看總幀數(shù)的設(shè)定。如果總幀數(shù)等于4,那么截取到第一行最后一幀圖時,就已經(jīng)取完了幀序列的所有圖片,如果再取第5幀,那么就應(yīng)該回到幀序列的第一幀重新開始下一輪循環(huán),如果總幀數(shù)大于4,比如等于16,那么到第5幀時,這一個播放序列沒有完成,還必須繼續(xù)從圖片的下一行取圖,也就是第二行的第一幅圖,如下圖所示:,void CAnimationSprite:SetFrame(int n) /參數(shù)n代表設(shè)置第幾幀 int tx1, ty1, tx2, ty2; bool bX, bY, bHS; int ncols = nTexWidth / width; /計算紋理圖片分為幾列 n = n % nFrames; /將n對總幀數(shù)取模 /如果n0,將n+nFrames, /時期取值范圍落在0,nFrames之間 if(n 0) n = nFrames + n; nCurFrame = n; /將當(dāng)前幀設(shè)置為n / 下面通過幀n計算紋理坐標(biāo) ty1 = ty; tx1 = txStart + n*width;,if(tx1 nTexWidth - width) /如果跨行 n -= (nTexWidth -tx) / width; /n在下一行應(yīng)該取
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具加工廠管理制度
- 家政實訓(xùn)室管理制度
- 應(yīng)急室物資管理制度
- 形體實訓(xùn)室管理制度
- 循環(huán)水檢測管理制度
- 心理拓展區(qū)管理制度
- 心臟超聲室管理制度
- 快遞站消防管理制度
- 急性腦卒中管理制度
- 總校部經(jīng)費管理制度
- 工業(yè)管道工程工程量清單項目設(shè)置及計價
- 濟寧市城市介紹家鄉(xiāng)旅游攻略PPT
- 熊浩演講稿全
- 基于MATLAB的控制系統(tǒng)仿真及應(yīng)用-第5章-基于MATLABSimulink的控制系統(tǒng)建模與仿真課件
- DB32∕T 186-2015 建筑消防設(shè)施檢測技術(shù)規(guī)程
- 巡檢培訓(xùn)課件.ppt
- 北師大版五下書法《第6課戈字旁》課件
- 國家開放大學(xué)電大本科《設(shè)施園藝學(xué)》2023-2024期末試題及答案(試卷代號:1329)
- 數(shù)列求和(錯位相減法)
- 固廢中心廢氣處理方案
- 關(guān)于地理高考四大能力要求解讀
評論
0/150
提交評論