PushButtonEngine是一个开源的模块化游戏引擎,你可以通过https://github.com/PushButtonLabs/PushButtonEngine得到其代码和相关文档。下面我将介绍一下其功能及一些实现的方式,如果有说得不对的地方请指正。文中的部分讲述直接翻译自官方文档。

PushButtonEngine的作用

应用PushButtonEngine让开发游戏变得简单,高效,PushButtonEngine适合做一些关卡的动作游戏,如超级玛丽等。这款引擎的模块化框架使得使用第三方类库更加容易,且提供了一些游戏需要的核心功能比如资源管理器、日志管理、调试检测、时间管理、全局命名对象等等,还集成了Box2D物理引擎,这样开发一个游戏你只需要配置关卡信息,建立相应的模块就行了,许多其他的事由游戏引擎来帮你完成。

下面是PushButtonEngine实现的一个小游戏,源码在官方github中可以找到。

这个小游戏主要包括4个部分:

1.资源部分,位于assets文件夹中,包括场景和人物图片,声音,关卡配置等

2.UI部分,包括开始视图和游戏视图

3.Controller部分,负责响应按键事件来控制人物

4.主程序,负责配置并启动PushButtonEngine

PushButtonEngine的设计特点

1.运用组件和实体

一个游戏对象被表示为一个IEntity,他包含了一个或多个IEntityComponents。当我们需要为PushButtonEngine增加一个组件时,我们必须要使得该组件类扩展EntityComponent或实现IEntityComponent接口,这样我们就能利用PushButtonEngine的框架来方便的实现各个组件间的相互访问。比如我们可以如下例那样定义一个组件,并进行相互间的访问。

   class TestComponent extends EntityComponent
{
public var aProperty:String = "Hello!";
} var value:String = owner.getProperty(new PropertyReference("@Test.aProperty")) as String; Logger.print(this, value); // Outputs "Hello!"

2.事件系统

一个IEntity会公开一个EventDispatcher对象,供整个IEntity的IEntityComponent使用,这样我们能方便在所有Component中分发或者监听事件,而不用担心一个Component分发的事件另外一个Component监听不到。

我们这样分发事件:

owner.eventDispatcher.dispatchEvent(new Event(SOME_ACTION));

3.引入对象

当你只是在level文件当中使用组件的时候,flex编译器并不知道他们被使用了,并且在编译的时候会删除他们,为了防止这种情况的产生,我们需要通过PBE.registType函数来引入对象。

PBE.registerType(com.pblabs.rendering2D.DisplayObjectRenderer);

4.一些重要的组件

PBE.startup函数主要的作用就是配置一些组件,下面说明一下:

TemplateManager: PushButtonEngine利用XML来配置关卡信息,而TemplateManager则是用来解析这些信息的。

ResourceManager: 负责关卡信息,图片,声音等资源的加载。

InputManager和InputMap: 负责用户输入控制,输入和操作的绑定等。

SoundManager: 负责声音的管理

ScreenManager:负责UI的控制

LevelManager: 负责关卡的控制和加载

Rendering2D: 提供了一个基本的图形图像渲染框架。

5.循环过程

每个游戏中都会有一些动态的对象,比如一个人物的位置,动作,在游戏中各对象运动的过程中,需要解决的一个重要问题是:多长时间处理(更新)一次游戏中的待处理事件,和更新显示界面。PushButtonEngine提供了一套循环框架来控制需要循环执行或是显示的对象。

这部分功能是由ProcessManager组件实现的,它允许你为执行对象定义优先级。

对于所有动态显示的对象,比如人物对象,引擎里定义了IAnimatedObject接口,并要求你实现onFrame函数来进行显示。

对于所有需要处理的计算,比如人物的位置,引擎里定义了ITickedObject接口,并要求你实现onTick函数来进行计算。

最新文章

  1. ProtocolBuffers-3 For Objective C (1)-简单的使用
  2. 转:MyBean的安装
  3. 在Copy-Item中集成认证信息以拷贝文件
  4. C#: XML Serializer
  5. Session、Cookie及cache的区别
  6. 用Access作为后台数据库支撑,书写一个C#写入记录的案例
  7. Python学习笔记四--字典与集合
  8. EF中使用SqlQuery进行参数化查询时抛出异常
  9. NOIP2014-普及组复赛-第一题-珠心算测验
  10. UILabel常用属性小结
  11. STL—vector
  12. 一个滑动选中RecyclerView中Item的布局SlidingCheckLayout,手指滑过Item时多项选中。
  13. PHP Simple HTML DOM解析器使用入门
  14. 将javaWeb项目转maven项目
  15. Zookeeper简介与集群搭建
  16. learning ddr3 protocol
  17. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息
  18. spoj1811 LCS - Longest Common Substring
  19. oracle 11g密码永不过期
  20. HDU3829:Cat VS Dog(最大独立集)

热门文章

  1. 关于 QRCode 的问题[C# 生成二维码固定大小]
  2. 关于在VS 上发布网站
  3. 【HDU 2853】 KM算法
  4. 一次熬夜解决的java乱码问题
  5. div自定义的滚动条 (竖直导航条)
  6. select的5中子句where,group by, havaing, order by, limit的使用顺序及实例
  7. Eclipse安装jad插件进行反编译
  8. JSP页面转向方式
  9. 第一课JAVA开发环境配置
  10. springmvc Failed to load resource: the server responded with a status of 404 (Not Found)