bada 2D遊戲編程之二——圖像繪製
因爲篇幅限制,因此拆成了兩篇。
3, 建立區域圖片
這種方式是先調用Bitmap的result Construct(const Bitmap& bitmap, const Osp::Graphics::Rectangle& rect)將圖片中的部分區域建立成一張獨立的Bitmap,而後再進行「整圖繪製」。
同「區域繪製」相似,它也是採用精靈表,可是與直接繪製精靈表中的精靈不同,它是先根據精靈列表中的精靈所在區域建立精靈圖片,而後再繪製精靈圖片。
下面的代碼就是如何繪製出上面的三張精靈圖片:
(1) 精靈表和精靈圖片聲明
Osp::Graphics::Bitmap* __robotBmp;
Osp::Graphics::Bitmap* __robot1Bmp;
Osp::Graphics::Bitmap* __robot2Bmp;
Osp::Graphics::Bitmap* __robot3Bmp;
(2) 加載精靈表圖片,並根據精靈表中精靈的位置建立精靈圖片
__robotBmp = AppResource::GetInstance()->GetBitmapN("robot.PNG");
int spriteWidth = 100;
int spriteHeight = 115;
__robot1Bmp = new Bitmap();
__robot1Bmp->Construct(*__robotBmp,Rectangle(0*spriteWidth,0*spriteHeight,spriteWidth,spriteHeight));
__robot2Bmp = new Bitmap();
__robot2Bmp->Construct(*__robotBmp,Rectangle(1*spriteWidth,0*spriteHeight,spriteWidth,spriteHeight));
__robot3Bmp = new Bitmap();
__robot3Bmp->Construct(*__robotBmp,Rectangle(2*spriteWidth,0*spriteHeight,spriteWidth,spriteHeight));
(3) 繪製精靈圖片
Canvas* pCanvas = GetCanvasN();
if(pCanvas){
pCanvas->DrawBitmap(Point(100,100), *__robot1Bmp);
pCanvas->DrawBitmap(Point(100,300), *__robot2Bmp);
pCanvas->DrawBitmap(Point(100,500), *__robot3Bmp);
delete pCanvas;
}
總結:
上面的3個例子獲得的結果都是同樣的,能夠說是異曲同工。下圖是最終的效果圖:
這三種方式各有各的優缺點,你們都須要結合遊戲的實際狀況進行綜合應用。
繪製方式
|
優勢
|
缺點
|
整圖繪製
|
繪圖效率高
|
每一個精靈都用一張單獨的圖片,會形成圖片太多不便於管理
|
區域繪製
|
採用精靈表能夠減小圖片數量,便於管理圖片
|
1. 繪圖效率低
2. 須要計算圖片在精靈表中的位置
|
建立區域圖片
|
1. 繪圖效率高
2. 採用精靈表能夠減小圖片數量,便於管理圖片
|
1. 須要計算圖片在精靈表中的位置
2. 須要爲精靈表中的圖片分配內存,增長了程序的內存使用量 |