bada 2D游戏编程之一——图形绘制

 

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平台上它起到的作用也是和画布非常类似的,因为它表示的是显示设备上的一块矩形的区域,在这块区域上可以进行各种绘制(图形,图像和文本),非常像绘画时用到的画布,而且它还提供了各种绘制函数。

函数

功能描述

SetFont(constFont &font)

设置字体

SetForegroundColor(constColor &color)

设置颜色

SetLineWidth(int width)

设置线条粗细

DrawBitmap(constPoint &point, const Bitmap &bitmap)

绘制位图

DrawEllipse(constRectangle &rect)

绘制椭圆

DrawLine(constPoint &point1, const Point &point2)

绘制直线

DrawRectangle (const Rectangle &rect)

绘制矩形

DrawText(constPoint &point, const EnrichedText &enrichedText)

绘制文本

DrawTriangle(constPoint &point1, const Point &point2, const Point &point3)

绘制三角形

详细的说明大家可以去参考一下帮助文档。

 

3.2  BufferInfo

BufferInfo可以理解成它表示的是Canvasbada系统中的内存,通过它的可以直接操作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()方法中添加绘制图形的代码

 

resultMainForm::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;

}

 

绘制的效果图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值