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平臺上它起到的做用也是和畫布很是相似的,由於它表示的是顯示設備上的一塊矩形的區域,在這塊區域上能夠進行各類繪製(圖形,圖像和文本),很是像繪畫時用到的畫布,並且它還提供了各類繪製函數。
函數
|
功能描述
|
設置字體
|
|
SetForegroundColor(const Color &color)
|
設置顏色
|
SetLineWidth(int width)
|
設置線條粗細
|
DrawBitmap(const Point &point, const Bitmap &bitmap)
|
繪製位圖
|
DrawEllipse(const Rectangle &rect)
|
繪製橢圓
|
繪製直線
|
|
DrawRectangle (const Rectangle &rect)
|
繪製矩形
|
DrawText(const Point &point, const EnrichedText &enrichedText)
|
繪製文本
|
DrawTriangle(const Point &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()方法中添加繪製圖形的代碼
result MainForm::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;
}
繪製的效果圖: