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. 须要为精灵表中的图片分配内存,增长了程序的内存使用量 |