嵌入式系統(tǒng)中動(dòng)畫設(shè)計(jì)方法的適用度分析
(7)使用VC實(shí)現(xiàn)高速平滑的簡(jiǎn)單動(dòng)畫的方法
許多軟件(特別是游戲軟件)的開(kāi)發(fā)中,實(shí)現(xiàn)高速平滑的動(dòng)畫需要比較深的技術(shù),如OpenGL、DirectX,并且可能還要開(kāi)發(fā)人員有深厚的數(shù)學(xué)功底。但是,如果只是在開(kāi)發(fā)嵌入式系統(tǒng)過(guò)程中,想為應(yīng)用程序的界面實(shí)現(xiàn)一些動(dòng)畫效果,就可能不用以上這些技術(shù)了,更多的是用WindowsAPI提供或MFC封裝后的GDI繪圖函數(shù)來(lái)實(shí)現(xiàn)。雖然所需動(dòng)畫的復(fù)雜程度不高,但作為開(kāi)發(fā)人員,并不能為此就降低對(duì)動(dòng)畫效果的要求。因此,需要了解如何用GDI函數(shù)來(lái)開(kāi)發(fā)平滑無(wú)閃、高速的動(dòng)畫。
該技術(shù)的關(guān)鍵就是在內(nèi)存中創(chuàng)建一個(gè)與顯示動(dòng)畫的窗口區(qū)域一樣大的位圖,先用GDI函數(shù)繪制位圖,然后在適當(dāng)?shù)臅r(shí)候從內(nèi)存中顯示出來(lái)。因?yàn)槲粓D已經(jīng)繪制好,不象平時(shí)編程那樣邊繪制邊顯示,所以,顯示一幀圖形時(shí)便減少了閃爍,從而實(shí)現(xiàn)平滑動(dòng)畫;同時(shí),由于圖形是從內(nèi)存中直接顯示到當(dāng)前窗體的,所以速度很快,從而實(shí)現(xiàn)高速動(dòng)畫。如果再創(chuàng)建一個(gè)線程后臺(tái)繪制圖形,將會(huì)實(shí)現(xiàn)很多特殊效果的動(dòng)畫,使嵌入式系統(tǒng)的用戶界面收到意想不到的效果。
在此基礎(chǔ)上,還可以在顯示位圖時(shí)作優(yōu)化顯示。例如:不是將位圖全部顯示出來(lái),而是顯示其中動(dòng)畫的一部分,因?yàn)锽itBlt函數(shù)作位傳輸很慢。這樣更符合嵌入式系統(tǒng)重視效率的特點(diǎn)。本文引用地址:http://m.butianyuan.cn/article/152229.htm
2 需要安裝第三方軟件的動(dòng)畫設(shè)計(jì)方法分析
(1)為教學(xué)研究開(kāi)發(fā)的嵌入式設(shè)備可使用Ubigraph
graphviz和Ubigraph都是圖論生成軟件,但Ubig-raph功能更強(qiáng),利用它可以快速生成圖論模型的圖形和動(dòng)態(tài)圖像,直觀地展示出各種圖論模型的三維結(jié)構(gòu),演示各種圖論算法的過(guò)程。因?yàn)榭梢郧度氲絁ava、C、C++等語(yǔ)言中,所以當(dāng)然適合用于嵌入式系統(tǒng)的動(dòng)畫設(shè)計(jì),尤其是一些專門為教學(xué)研究開(kāi)發(fā)的嵌入式設(shè)備。
(2)Flash對(duì)嵌入式系統(tǒng)而言太過(guò)華麗
Flash是一種功能強(qiáng)大的矢量動(dòng)畫軟件,但是所用到的高級(jí)技術(shù)比較多,不過(guò)為了能夠做出精美的電影特技效果的動(dòng)畫,還是值得對(duì)其進(jìn)行深入研究的。然而,對(duì)于嵌入式系統(tǒng)開(kāi)發(fā)而言,它實(shí)在是太過(guò)華麗了;如果不是特別需要突出游戲或者動(dòng)畫的精致效果,一般開(kāi)發(fā)者應(yīng)該不會(huì)舍本逐末以此來(lái)犧牲系統(tǒng)的速度和容量。
(3)DirectDraw方法對(duì)嵌入式系統(tǒng)的適用度
DirectDraw使用頁(yè)面切換的方法實(shí)現(xiàn)圖像動(dòng)態(tài)。它不僅可以訪問(wèn)系統(tǒng)內(nèi)存,還可以訪問(wèn)顯示內(nèi)存,實(shí)現(xiàn)圖像動(dòng)態(tài)的同時(shí)不會(huì)使得畫面閃爍,是一種“完美切換”技術(shù);因此DirectDraw技術(shù)很受程序員青睞,尤其在虛擬現(xiàn)實(shí)技術(shù)中應(yīng)用廣泛。但是,顯而易見(jiàn),該方法需要占用很大內(nèi)存,安裝所需的開(kāi)發(fā)文件同樣需要較大硬盤空間,應(yīng)用到一般的嵌入式系統(tǒng)中,對(duì)反應(yīng)速度等的限制將會(huì)比較明顯。
其實(shí),用DirectDraw編程的核心要點(diǎn)即“幾個(gè)表面之間拷來(lái)拷去”。在對(duì)界面的動(dòng)畫復(fù)雜程度要求不高的嵌入式系統(tǒng)中,可以采用C程序作為開(kāi)發(fā)語(yǔ)言,并且在動(dòng)畫實(shí)現(xiàn)方法上,利用前述C程序設(shè)計(jì)中顯示頁(yè)和編輯頁(yè)交替變化的方法,來(lái)代替幾個(gè)表面交替拷貝的DirectDraw方法。然而,如果是大型的嵌入式系統(tǒng),并且重視界面動(dòng)畫效果,采用DirectDraw方法和面向?qū)ο箝_(kāi)發(fā)語(yǔ)言,仍然是更好的選擇。
當(dāng)然,若對(duì)美術(shù)工藝有特殊要求,可以嘗試將更專業(yè)的技術(shù)(如顏色鎖結(jié)及用于3D效果的Z排序與視差)引入到嵌入式系統(tǒng)軟件設(shè)計(jì)中――這種系統(tǒng)本身也應(yīng)該是專業(yè)的、功能專用的,否則只能停留在理論上,難以實(shí)現(xiàn)!
3 可用于嵌入式系統(tǒng)開(kāi)發(fā)的腳本語(yǔ)言
當(dāng)動(dòng)畫應(yīng)用于網(wǎng)絡(luò)時(shí),可以選擇直接使用腳本語(yǔ)言設(shè)計(jì),譬如JSP、PHP等。當(dāng)今的很多嵌入式系統(tǒng)都有連接網(wǎng)絡(luò)的需求和相應(yīng)功能,雖然大多數(shù)系統(tǒng)的屏幕動(dòng)畫都不涉及對(duì)外發(fā)布的問(wèn)題,但在聯(lián)網(wǎng)嵌入式系統(tǒng)的開(kāi)發(fā)中直接使用腳本語(yǔ)言編寫動(dòng)畫,也不啻為一個(gè)新的思路。
Python可作為嵌入式系統(tǒng)的開(kāi)發(fā)語(yǔ)言(在Nokia智能手機(jī)所采用的Symbian操作系統(tǒng)上已得到證明)。它最大的優(yōu)勢(shì)是能夠很輕松地把使用其他語(yǔ)言制作的各種模塊(尤其是C/C++)輕松地聯(lián)結(jié)在一起。由此,既可以直接使用Py-thon編寫簡(jiǎn)單的界面動(dòng)畫,也可以將對(duì)速度要求更高的復(fù)雜動(dòng)畫使用C++語(yǔ)言編寫后嵌入到Python程序中。
評(píng)論