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