zoukankan      html  css  js  c++  java
  • 游戏引擎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函数来进行计算。

  • 相关阅读:
    改造vant日期选择
    css3元素垂直居中
    npm综合
    (转)网页加水印方法
    Mac下IDEA自带MAVEN插件的全局环境配置
    隐藏注册控件窗口
    High performance optimization and acceleration for randomWalk, deepwalk, node2vec (Python)
    How to add conda env into jupyter notebook installed by pip
    The Power of WordNet and How to Use It in Python
    背单词app测评,2018年
  • 原文地址:https://www.cnblogs.com/studynote/p/3161470.html
Copyright © 2011-2022 走看看