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函数来进行计算。

游戏引擎PushButtonEngine简介的更多相关文章

  1. 开源3D游戏引擎Irrlicht简介

    Irrlicht简介 Irrlicht在国内也被叫做"鬼火"引擎,是一款用C++编写的开放源代码的高性能游戏引擎.而且是跨平台的,具有很好的移植性,Irrlicht支持OpenGl ...

  2. 转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架

    高层游戏引擎——基于OGRE所实现的高层游戏引擎框架 这是意念自己的毕业论文,在一个具体的实践之中,意念主要负责的是物件和GUI之外的其他游戏系统.意念才学疏陋,望众位前辈不吝赐教.由于代码质量不高. ...

  3. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇:简介及目录》(附上完整工程文件)

    G-3D引擎2D射击类游戏制作教程 游戏类型: 打飞机游戏属于射击类游戏中的一种,可以划分为卷轴射击类游戏. 视觉表现类型为:2D 框架简介: Genesis-3D引擎不仅为开发者提供一个3D游戏制作 ...

  4. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇:简介及目录》(附上完整工程文件)

    跑酷游戏制作 游戏类型: 此游戏Demo,为跑酷类游戏. 框架简介: 游戏通常由程序代码和资源组成.如果说模型.贴图.声音之类的可以给游戏环境提供一个物理描述和设置,那么脚本和代码块会给游戏赋予生命, ...

  5. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程:简介及目录》(附上完整工程文件)

    介绍:讲述如何使用Genesis-3D来制作一个横版格斗游戏,涉及如何制作连招系统,如何使用包围盒实现碰撞检测,软键盘的制作,场景切换,技能读表,简单怪物AI等等,并为您提供这个框架的全套资源,源码以 ...

  6. 开源战棋 SLG 游戏框架设计思考(一)简介和游戏引擎

    战棋 SLG 游戏 SLG(Simulation Game)游戏是模拟游戏的简称.战棋类的SLG有两种:一种是 War Game 中的兵棋推演分支,常见的游戏有战争艺术3(TOAW3 — The Op ...

  7. Genesis-3D开源游戏引擎简介!

    Genesis-3D由搜狐畅游公司超百人引擎研发团队历时数年耗费巨资自主研发,是国内外首款商业开源的3D游戏引擎平台.它包括跨平台渲染引擎.2D引擎.物理引擎.音效系统.粒子系统.动画系统.服务器引擎 ...

  8. UWP简单示例(三):快速开发2D游戏引擎

    准备 IDE:VisualStudio 2015 Language:VB.NET/C# 图形API:Win2D MSDN教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面 ...

  9. Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

    一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...

随机推荐

  1. hdu Sudoku Killer

    简单的dfs,主要就是每个?处填的值是否满足条件的判断.这道题感觉考察的是输出格式的控制. #include"iostream" #include"stdio.h&quo ...

  2. shell bash ksh

    shell 是一个交互性命令解释器.shell独立于操作系统,这种设计让用户可以灵活选择适合自己的shell.shell让你在命令行键入命令,经过shell解释后传送给操作系统(内核)执行.     ...

  3. IOS第一天多线程-05GCD队列的使用

    ************** // // HMViewController.m // 08-GCD02-队列的使用(了解) // // Created by apple on 14-9-15. // ...

  4. 算法与数据结构题目的 PHP 实现:栈和队列 由两个栈组成的队列

    思路:同样使用 PHP 的数组模拟栈.栈的特点是先进后出,队列的特点是先进先出,可以用第一个栈(StackPush)作为压入栈,压入数据的时候只往这个栈中压入数据,第二个栈作(StackPop)为弹出 ...

  5. Ubuntu每次启动都显示System program problem detected的解决办法

    Ubuntu每次启动都显示System program problem detected的解决办法 sudo gedit /etc/default/apport 将enabled=1改为enabled ...

  6. 使用 readfile() 下载文件

    下载图片 <?php $file = 'monkey.gif'; if (file_exists($file)) { header('Content-Description: File Tran ...

  7. [daily][device] linux添加打印机

    只用过HP的打印机,用过两个,分别是:HP_p2055dn, 和 HP_LaserJet_Professional_M1216nfh  别的不知道.以下内容仅试用于HP打印机. 第一:装HP,打印机工 ...

  8. 文档生成工具 appledoc

    参考文章 1.安装: $ git clone git://github.com/tomaz/appledoc.git $ cd appledoc $ sudo sh install-appledoc. ...

  9. iOS cocospods Updating local specs repositories

    pod install --verbose --no-repo-update (在安装的时候) pod update --verbose --no-repo-update (在更新库的时候) 如果长时 ...

  10. thinkphp的钩子的两种配置和两种调用方法

    thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十 ...