• 游戏引擎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函数来进行计算。

  • 相关阅读:
    Python网页信息采集:使用PhantomJS采集淘宝天猫商品内容
    让Scrapy的Spider更通用
    API例子:用Python驱动Firefox采集网页数据
    API例子:用Java/JavaScript下载内容提取器
    Python即时网络爬虫:API说明
    Python: xml转json
    git 更新本地代码
    数据库事务
    Python的线程、进程和协程
    Java基础语法
  • 原文地址:https://www.cnblogs.com/studynote/p/3161470.html
Copyright © 2020-2023  润新知