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;
}
绘制的效果图: