天天看點

bada 2D遊戲程式設計之一——圖形繪制

bada 2D遊戲程式設計之一——圖形繪制

在2D遊戲中,使用者見到的畫面通常是通過兩種方式實作的,一種是圖形繪制,就是在螢幕上繪制各種幾何圖元,如線條和矩形等;還有一種是圖像繪制,也就是常說的貼圖,遊戲中的很多畫面都是一張張的圖檔貼上去的。

其實在智能機時代,完全采用圖形繪制的遊戲已經很難吸引玩家的眼球了,圖形繪制在遊戲中更多的是扮演一個輔助的角色,下面給大家舉兩個常用的例子。

1,畫線類遊戲。這類遊戲中有的會通過繪制線條來控制精靈的運動軌迹。

2,繪制精靈對應的幾何體。在碰撞檢測中,都會根據遊戲精的形狀将其分解成對應的幾何體,如分解成矩形或者圓形等,而在遊戲的調試階段會對這些幾何體進行繪制并顯示出來,這樣可以便于觀察精靈的運作是否與實體世界規律相吻合。(這部分可能讀起來有點費勁,等大家看到後面的實體引擎部分就明白了)

接下來主要給大家介紹一下繪制相關的類和對應的API,這些類都包含在Osp::Graphics命名空間當中。同時為了友善了解,我給這些類都統稱為“繪制上下文”,并根據個人的了解按照“繪制的工具”、“繪制的樣式”和“繪制的内容”對它們進行了分類。下面對這些類進行簡單的說明。

1.      繪制的内容

“繪制的内容”是指那些實實在在被繪制出來的,并顯示在螢幕上的實體。如點、圖檔、矩形、文本等。

作用
Bitmap 表示圖檔内容
Dimension 表示一個不帶有坐标位置的矩形區域
EnrichedText 表示文本内容
Point 表示一個坐标點
Rectangle 表示一個帶有坐标位置的矩形區域

2.      繪制的樣式

“繪制的樣式”就是對繪制的内容進行修飾和美化。如繪制的顔色和樣式等。

作用
Font 表示字型,包括字型的樣式等屬性
Color 表示ARGB (Alpha, Red, Green, Blue)顔色模式

3.      繪制的工具

我對“繪制的工具”的了解是指能夠通過這些類(工具類)進行繪制,它們都包含有各種繪制(Draw)函數,根據指定的繪制的内容和繪制的樣式直接調用這些Draw函數進行繪制就可以了,不需要關心是如何繪制出各種圖形圖像的。

3.1  Canvas類

Canvas的英文意思是畫布,在bada平台上它起到的作用也是和畫布非常類似的,因為它表示的是顯示裝置上的一塊矩形的區域,在這塊區域上可以進行各種繪制(圖形,圖像和文本),非常像繪畫時用到的畫布,而且它還提供了各種繪制函數。

函數 功能描述
SetFont(constFont &font) 設定字型
SetForegroundColor(constColor &color) 設定顔色
SetLineWidth(int width) 設定線條粗細
DrawBitmap(constPoint &point, const Bitmap &bitmap) 繪制位圖
DrawEllipse(constRectangle &rect) 繪制橢圓
DrawLine(constPoint &point1, const Point &point2) 繪制直線
DrawRectangle (const Rectangle &rect) 繪制矩形
DrawText(constPoint &point, const EnrichedText &enrichedText) 繪制文本
DrawTriangle(constPoint &point1, const Point &point2, const Point &point3) 繪制三角形

詳細的說明大家可以去參考一下幫助文檔。

3.2  BufferInfo類

BufferInfo可以了解成它表示的是Canvas在bada系統中的記憶體,通過它的可以直接操作Canvas的記憶體。這樣我們就可以通過改變記憶體資料來改變Canvas要顯示的内容。很明顯這樣操作起來會非常的不友善,即使是畫一條直線的也得經過大量的運算,寫出大量的代碼。

這個類在2D遊戲開發中基本不會用到,是以就不進行深入的介紹的。

大家可以參考《通過Canvas進行直接像素通路》這篇文章:

http://developer.bada.com/article/Direct-pixel-accessing-with-graphic-Canvas

最後給大家展示一下如何進行圖形繪制。使用bada SDK提供的API進行圖形繪制的主要步驟如下:

(1)   建立一個基于Form的應用程式

(2)   重寫Form對象的OnDraw()方法

(3)   在OnDraw()方法中添加繪制圖形的代碼

resultMainForm::OnDraw(void)

{

    result r = E_SUCCESS;

    //擷取繪制的工具Canvas

    Canvas* pCanvas =GetCanvasN();

    if(pCanvas){

       //設定繪制的樣式

       Font font;

       font.Construct(FONT_STYLE_PLAIN,32);

       pCanvas->SetFont(font);

       pCanvas->SetForegroundColor(Color::COLOR_BLACK);

       //根據繪制的内容進行繪制

       pCanvas->DrawText(Point(10,10),"This is the draw text test");

       pCanvas->DrawEllipse(Rectangle(10, 100, 460, 100));

       pCanvas->DrawLine(Point(10, 250),Point(470, 250));

       pCanvas->DrawRectangle(Rectangle(10, 300, 460, 100));

       pCanvas->DrawTriangle(Point(10,750),Point(240,450),Point(470,750));

       delete pCanvas;

    }

    return r;

}

繪制的效果圖:

bada 2D遊戲程式設計之一——圖形繪制

繼續閱讀