游戏引擎PushButtonEngine简介
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简介的更多相关文章
- 开源3D游戏引擎Irrlicht简介
Irrlicht简介 Irrlicht在国内也被叫做"鬼火"引擎,是一款用C++编写的开放源代码的高性能游戏引擎.而且是跨平台的,具有很好的移植性,Irrlicht支持OpenGl ...
- 转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架 这是意念自己的毕业论文,在一个具体的实践之中,意念主要负责的是物件和GUI之外的其他游戏系统.意念才学疏陋,望众位前辈不吝赐教.由于代码质量不高. ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇:简介及目录》(附上完整工程文件)
G-3D引擎2D射击类游戏制作教程 游戏类型: 打飞机游戏属于射击类游戏中的一种,可以划分为卷轴射击类游戏. 视觉表现类型为:2D 框架简介: Genesis-3D引擎不仅为开发者提供一个3D游戏制作 ...
- 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇:简介及目录》(附上完整工程文件)
跑酷游戏制作 游戏类型: 此游戏Demo,为跑酷类游戏. 框架简介: 游戏通常由程序代码和资源组成.如果说模型.贴图.声音之类的可以给游戏环境提供一个物理描述和设置,那么脚本和代码块会给游戏赋予生命, ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程:简介及目录》(附上完整工程文件)
介绍:讲述如何使用Genesis-3D来制作一个横版格斗游戏,涉及如何制作连招系统,如何使用包围盒实现碰撞检测,软键盘的制作,场景切换,技能读表,简单怪物AI等等,并为您提供这个框架的全套资源,源码以 ...
- 开源战棋 SLG 游戏框架设计思考(一)简介和游戏引擎
战棋 SLG 游戏 SLG(Simulation Game)游戏是模拟游戏的简称.战棋类的SLG有两种:一种是 War Game 中的兵棋推演分支,常见的游戏有战争艺术3(TOAW3 — The Op ...
- Genesis-3D开源游戏引擎简介!
Genesis-3D由搜狐畅游公司超百人引擎研发团队历时数年耗费巨资自主研发,是国内外首款商业开源的3D游戏引擎平台.它包括跨平台渲染引擎.2D引擎.物理引擎.音效系统.粒子系统.动画系统.服务器引擎 ...
- UWP简单示例(三):快速开发2D游戏引擎
准备 IDE:VisualStudio 2015 Language:VB.NET/C# 图形API:Win2D MSDN教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面 ...
- Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...
随机推荐
- HTTP协议 (七) Cookie
HTTP协议 (七) Cookie Cookie是HTTP协议中非常重要的东西, 之前拜读了Fish Li 写的[细说Cookie], 让我学到了很多东西.Fish的这篇文章写得太经典了. 所以我这篇 ...
- mysql添加外键错误
异常信息如下: ERROR <HY000>:Can't create table '.\itac\#sql-6fc_546f.frm' <errno:121> 我的问题是新建的 ...
- Mongodb数据库加密存储(python)
需求: 不知道大家有没有遇到过这样的需求:自己的服务器出于对数据库安全的保护,需要对存储的数据进行加密保护.这样万一数据库被人拿到,别人也不能拿到数据库里面的内容.这里还有一个前提:前端的展示页面是 ...
- JS判断登陆端是PC还是手机
前些天朋友问我怎么判断登陆端是PC还是手机...自己也是很困惑,然后自己查了资料,这些东西都藏在USER-AGENT里面,查了他的一些属性,写了一个简单的验证页面大家共同学习. 读取navigator ...
- ThinkPHP 3.2.3 自动加载公共函数文件的方法
方法一.加载默认的公共函数文件 在 ThinkPHP 3.2.3 中,默认的公共函数文件位于公共模块 ./Application/Common 下,访问所有的模块之前都会首先加载公共模块下面的配置文件 ...
- LoadRunner11.00入门教程出现的问题
问题1.打不开浏览器 解决办法:打开浏览器工具--Internet 选项--高级--取消启用第三方浏览器扩展. 顺带解决了,有两个浏览器问题. 两个浏览器:一个是自带的IE,一个是其他软件插件. 解决 ...
- Git: untrack a file in local repo only and keep it in the remote repo
You could update your index: git update-index --assume-unchanged nbproject/project.properties and ma ...
- Install MySQL on Mac by Homebrew
1. 安装mysql brew update brew install mysql 2. 启动mysql mysql.server start 3. 登录mysql mysql -uroot -p ...
- backbone event 事件订阅 和发布 源码小读
nodejs有eventEmitter 类,想到backbone 有个event模块 可以对对象做事件绑定和触发,是backbone的核心模块. backbone event模块 on 添加自定义事 ...
- MySql超新手入门
https://www.kancloud.cn/thinkphp/mysql-tutorial/36457