[GEiv]第一章:靜態繪製(一) 圖元與基本圖形

第一章:靜態繪製(一)

圖元與基本圖形繪製

        從這篇文章開始,進行引擎功能的詳細講解,第一章主要講解靜態繪製的基本API,這是製作動畫的基礎部分。

[圖元][class: geivcore.enginedata.obj.Obj]]

        我承認Obj這個名字不是很好,這是歷史原因造成的。Obj是圖元類,任何展示在屏幕上的圖像都由Obj實現,任何對圖像的變換操作由ObjAPI來完成,一個圖元中容納若干個圖形類(可以是0個),在一個圖元中圖形被編號爲由0開始的整數索引,但在實際操作中,使用索引的情況並不多見。

[引擎句柄][interface: geivcore.UESI]

        Obj的創建由引擎句柄(UESI)完成,UESI是引擎的上層包裝接口,它向上提供引擎的全部系統調用,在遊戲系統開始時,最好將UESI作爲構造器參數傳入或乾脆將UESI做靜態化單例包裝,以供上層框架隨時調用。總之,UESI就是引擎的全部,這點需要注意。

[例子]畫一個方形:

public static void main(String[] args) {
              UESI UES = new R();//初始化引擎環境
              Obj rect = UES.creatObj(UESI.BGIndex);//創建一個圖元,在背景層次。
              rect.addGLRect("FFFFFF",0,0,100f,100f);//在圖元上畫一個正方形,位置(0,0),大小:100X100。顏色FFFFFF
              rect.show();//顯示
              rect.setDx(100);//將圖元x座標移動到100位置
              rect.setDy(100); //將圖元y座標移動到100位置
       }

        

        有必要進行詳細的代碼解釋。

        1)UESI UES = new R();//初始化引擎環境

        UESI前者說過,是引擎包裝接口,而R類是這個接口的一個具體實現,我們使用接口屏蔽R的具體實現細節。典型的遊戲開發中只會使用到一個R,因此,只需要保留這個UESI引用即可,不要每次都實例化。

        2) Obj rect =UES.creatObj(UESI.BGIndex);

        Obj爲圖元,圖元的創建能且僅能使用UES的createObj方法,不要使用new Obj的形式。構造參數是這個圖元所在的繪製層次,這個引擎由下至上保留了7個繪製層次,當多個圖元出現在相同位置時,上層圖元一定會覆蓋下層圖元,而同層圖元覆蓋規則依賴創建的順序。

        

       這裏,BGIndex是最底層,一般放置遊戲的背景元素。

        3)rect.addGLRect("FFFFFF",0,0,100f,100f);

        rect是一個圖元引用,圖元使用一系列addGL*方法來創建各種圖形,它們包括:


        一共有十六中方法,當然包括了一些重載情況。

        拋開重載不提,依次簡單介紹一下:

        addGLFont:向圖元繪製一個靜態字體,需要指定其顏色、位置、字體、字號、字形、內容、左下縮進。支持中文,當然也可以使用setFontString方法進行修改。(會重新生成文字紋理,所以不要頻繁調用,字體調用會使用單獨章節講解)

        addGLImage:創建一個矩形區域,填充指定的圖像紋理,需要指定繪製位置和圖像文件,圖像文件可以是JPG\PNG\BMP等外部文件。在單獨由IO讀取文件流後,生成的紋理會保存在內存中,不會重複讀取IO。

        addGLLine:繪製一條線,需要給定顏色、兩點座標,可以指定繪製寬度。

        addGLNop:什麼也不繪製。Nop就是Nop。

        addGLOval:繪製一個橢圓,指定位置與長短軸,由於是使用極座標進行的多邊形模擬,可以指定使用的頂點數來提高圖像質量。

        addGLPoint:繪製頂點,指定位置與顏色。

        addGLRect:繪製矩形,指定顏色與長寬。

        addGLTrigon:繪製三角形,指定顏色與三組座標。

        addGLWorldSet:繪製字庫,與靜態字體不同,字庫中每個字單獨產生紋理,例如產生0~9 十個數字的紋理,就可以顯示所有數字(會在字體章節詳細講解)對於易變數據的顯示,推薦此種方式。

        4)rect.show();

        顯示圖元,你可以調用hide隱藏一個圖元,或調用destory方法永久銷燬。

        5)setDx,Dy

        設置圖元的位置,整個圖元會作爲一個整體一起移動,(不只是位置,很多圖元變換API會影響到圖元中的全部圖形,這點很有用),順帶一提,在不指定配置文件的情況下,默認長寬座標爲800X600,以左上爲0座標點,左到右爲X方向,上到下爲Y方向。

[另一個例子,多圖形圖元]

        在上例中稍加改動:

        Obj rect =UES.creatObj(UESI.BGIndex);
        rect.addGLRect("FFFFFF",0,0,300f,300f);
        rect.addGLLine("00FF00",0,0,300f,300f);
        rect.addGLOval("FFFF00",0,0,300f,300f);
        rect.show();
        rect.setDx(100);
        rect.setDy(100);

        

        在rect圖元中,創建了三個圖形,分別爲矩形、線、圓形。

        它們分別被名爲DivIndex的圖元索引標記爲0、1、2。

 

        在進行圖元變換過程中(包括位置、角度、通道),它們默認作爲一個整體一同變換。當然,你也可以使用圖元索引指定圖元中要變換的某個圖形。請看下例

[填充例子]

        我們使用rect.setGLFill(true);方法將圖元設置爲填充狀態。在show前加入這句後執行結果如下:

        

        可以看到,作爲底層的方形被填充了,但是圓形卻沒有填充。

        此時若我想填充圓形而非方形該如何呢?

        使用圖元索引:rect.setGLFill(2,true);,其中2是圓形的圖元索引,此時執行結果如下:

        

        在圖元類中,大部分set方法都有針對圖元索引的重載,以提供靈活的操作方式。但圖形過多時不推薦放到同一個圖元中,圖元單圖形的方式是被推薦的。

[總結]

        通過這一章,應該可以進行基本圖形的繪製了。

發佈了42 篇原創文章 · 獲贊 50 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章