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(const Font &font)

设置字体

SetForegroundColor(const Color &color)

设置颜色

SetLineWidth(int width)

设置线条粗细

DrawBitmap(const Point &point, const Bitmap &bitmap)

绘制位图

DrawEllipse(const Rectangle &rect)

绘制椭圆

DrawLine(const Point &point1, const Point &point2)

绘制直线

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;

}

绘制的效果图:

转载于:https://blog.51cto.com/badaeva/920025

bada 2D游戏编程之一——图形绘制相关推荐

  1. bada 2D游戏编程之十——关键帧动画原理

    bada 2D游戏编程之十--关键帧动画原理 前面提到的逐帧动画有一个关键的缺点就是需要为动画中的每一帧都提供一张单独的图片,由于每一帧的图片都需要单独提供,制作起来比较麻烦,图片量也比较大.用关键帧 ...

  2. 《Java 2D游戏编程入门》—— 1.5 创建一个主动渲染的窗口

    本节书摘来异步社区<Java 2D游戏编程入门>一书中的第1章,第1.5节,作者:[美]Timothy Wright(莱特),更多章节内容可以访问云栖社区"异步社区"公 ...

  3. 使用directX 7结合C#进行2D游戏编程

    使用directX 7结合C#进行2D游戏编程 前言 对于C#的开发人员来讲,GDI+ 是一个拥有丰富的绘图API指令.传统.高效的程序集.但不幸的是,你要想用她来开发一个复杂而又平滑的动画的时候,我 ...

  4. 《HTML5 2D游戏编程核心技术》——第1章,第1.1节Snail Bait游戏

    本节书摘来自华章出版社<HTML5 2D游戏编程核心技术>一书中的第1章,第1.1节,作者[美] 戴维·吉尔里,更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  5. 《HTML5 2D游戏编程核心技术》——第2章,第2.3节使用CSS背景

    **本节书摘来自华章出版社<HTML5 2D游戏编程核心技术>一书中的第2章,第2.3节,作者[美] 戴维·吉尔里,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...

  6. 《HTML5 2D游戏编程核心技术》——第1章,第1.8节练习

    本节书摘来自华章出版社<HTML5 2D游戏编程核心技术>一书中的第1章,第1.8节练习,作者[美] 戴维·吉尔里,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...

  7. 《HTML5 2D游戏编程核心技术》——第1章,第1.3节特别功能

    本节书摘来自华章出版社<HTML5 2D游戏编程核心技术>一书中的第1章,第1.3节特别功能,作者[美] 戴维·吉尔里,更多章节内容可以访问云栖社区"华章计算机"公众号 ...

  8. 《HTML5 2D游戏编程核心技术》——第1章,第1.5节开始Snail Bait游戏编程

    1.5 开始Snail Bait游戏编程 图1.16显示了Snail Bait游戏的初始文件集合.在本书中,我们将逐步增加更多的文件.但是现在,我们需要一个HTML文件来定义游戏中HTML元素的结构: ...

  9. 【269期门诊集锦】iOS游戏开发—2D游戏编程之我见

    技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问.从热门技术到前沿知识,从技术答疑到职业规划.每期一个主题,站在最新最热的技术前沿为你引航! 本期门诊特邀iOS游戏开发专 ...

最新文章

  1. TensorFlow练习16: 根据大脸判断性别和年龄
  2. 用C/C++编写window服务
  3. anaconda怎么使用python包_Anaconda中python包的介绍与使用方法
  4. Stream流中的常用方法_filter
  5. 一、ElasticSearch分词器概念
  6. 【kafka】在 Kafka Streams 中启用 Exactly-Once
  7. 我学会了用计算机作文,我学会了做饭作文300字(通用10篇)
  8. selenium (二)
  9. Python3按编号创建文件夹并在文件夹下创建对应编号的txt文件
  10. Arduino Uno ADS1115 数模转换
  11. 练习linux命令的软件,找到一个linux下的中文打字练习软件
  12. 中国超级稻在18个亚非国家试种推广 国稻种芯百团计划行动
  13. 【信息系统项目管理师】案例分析记忆题
  14. 敌营十八年Ⅱ虎胆雄心
  15. wps for linux显示系统缺失字体解决办法
  16. 薅羊毛的神器,悄悄介绍给你,低调使用!
  17. Mac不同应用之间切换使用不同输入法
  18. mybatis-plus调用自身的 selectById 方法报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You hav
  19. Hive之——数据定义
  20. 程序设计天梯赛2021年选拔 L2-4红豆 (什么完全树给定后序遍历)

热门文章

  1. 那些公司用计算机仪表电缆,计算机及仪表用电缆技术
  2. php warning: array_merge(),php数组合并array_merge()函数使用注意事项_php技巧
  3. JeeSite 企业信息化快速开发平台
  4. 浅析如何通过PHP类的反射来实现依赖注入
  5. 将PostgreSQL数据库扩展到每个月12亿条记录的经验教训
  6. php7下新版Ueditor
  7. 利用元数据管理数据质量
  8. 如何迅速掌握并提高linux运维技能
  9. pageResponse - 让H5适配移动设备全家(移动端适配)
  10. mysql示例employees数据库