bada 2D游戏编程之三——游戏的基本结构

bada 2D游戏编程之三——游戏的基本结构

 

1,不同的角度看游戏结构

站在玩家的角度看游戏的话,游戏是由各个不同的界面组成的,并在各个界面之间进行跳转。比如从游戏开始的“开始画面”进入到游戏的“菜单画面”再跳转到“游戏画面”等。玩家也根本不需要去了解这些画面是如何实现的,是什么样的机制保证游戏去不断的更新画面等。

而开发者在从技术的角度去看游戏的结构时,可以化繁为简,将游戏简化为3个基本的模块:输入模块、逻辑模块和输出模块。

下面分别对这三个模块各起的作用进行一些介绍:

(1)    输入模块:负责接收各种输入事件并进行相应的处理。在游戏中主要会处理两种类型的事件,一种是用户输入事件,例如按键事件,触摸事件(单点触摸、多点触摸);还有一种是传感器事件,最典型的就是加速度传感器的变化事件。在输入模块中主要就是监听和接收这些事件,当这些事件到来时会对这些事件进行缓存或者立即执行等操作。

(2)    逻辑模块:逻辑模块处理游戏中的各种逻辑变化。这是游戏中的核心部分,也是最复杂的部分,它与游戏的内容是密不可分的。常见的处理就是根据输入模块中接收到的事件来进行游戏的逻辑判断,例如用户按向上键来控制游戏主角向上移动,这个向上键的事件在输入模块接收到了并进行了前期的处理,在逻辑处理模块,游戏会根据游戏逻辑来判断游戏是向上走还是说此时已经碰到了墙壁而不能继续向前。

(3)    输出模块:游戏中主要有渲染和音频播放两种类型的输出。渲染输出是根据逻辑处理的结果,获得界面上需要显示的物体坐标,然后将他们绘制在屏幕上;而音频输出是根据逻辑处理结果来决定播放的音效,例如游戏中的物体发生了碰撞,则可以播放碰撞声等。

 

2,游戏的驱动方式

将前面的输入模块、逻辑模块和输出模块合成起来就够成了游戏的运行框架。那么通过什么样的方式来驱动游戏运行呢,驱动的方式不一样,会直接影响到游戏的运行机制。常见的游戏驱动方式有两种,一种是事件驱动,还有一种是时间驱动。

 

在事件驱动的游戏框架中,游戏只有当接收到输入事件之后才会往下进行,进入到逻辑模块和输出模块。如果没有事件输入的话,游戏则一直处于等待输入的状态,直到有输入改变为止。例如在一个静止不动的游戏画面,在事件驱动的框架下,游戏会保持这个画面不变,直到检测到输入事件后才会根据游戏逻辑运算的结果去渲染游戏画面。

这样在事件驱动方式下的游戏运行方式是:

 

而在时间驱动的游戏框架中,不管有没有事件输入,游戏都在不停的循环执行输入模块、逻辑模块和输出模块。也就是在不断的检测是输入事件,运行游戏逻辑,渲染画面和播放音效。即使玩家看到的是一个静止不动的画面,它也是游戏不断渲染产生的效果,只不过是由于每次渲染的内容是一样的,看不到变化效果而已。

在时间驱动方式下的游戏运行方式是:

 

3,选择合适的驱动方式

那么在游戏开发中选择哪种驱动方式来驱动游戏呢?其实现绝大多数的游戏都是采用的时间驱动方式,而且采用时间驱动是专业游戏的普遍做法。但这并不是表示事件驱动的方式就没有市场了,它多用于简单的游戏开发中,如象棋,围棋数独等游戏,这类游戏大多不需要实现复杂的动画效果。

 

类型

优点

缺点

事件驱动

只有当有事件输入时才进行会执行逻辑模块和输出模块,这样会节省系统资源

游戏会在所有接收事件输入的地方运行逻辑模块和输出模块,这样会造成代码上比较混乱,没有进行集中处理

时间驱动

会对游戏中的输入事件进行缓存,统一在游戏循环中进行处理,这样逻辑上比较清晰。

 

游戏会循环运行,即使没有事件输入也会执行逻辑模块和输出模块,比较消耗系统资源

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值