Home - shinku/miki-es6 GitHub Wiki
miki 游戏引擎用于在以融合 VUE 或者 react 脚手架的游戏引擎解决方案。 使得日常互动游戏项目的开发中,游戏部分以组件形式存在于项目中。 优点在于:
- 1.脚手架的融合性 直接通过 es6 import 的方式引入游戏模块
- 2.戏业务不再独立:跟以上所述类似,游戏部分可以更加方便的调用脚手架的组件,反之亦然。
- 3.游戏使用到的素材也可以在整个应用中与脚手架共享。
- 以上特征都集中在一点:融合性更高,以意味着对游戏的部分拥有更高的管制权限。
MIKI 是一套纯es6 开发的游戏引擎。目的之为了和vue以及react(es6) 框架出的游戏项目做到更好的融合性
import {miki,resource,stage,frameSprite,sprite,textField} from '@/lib/MIKI/index.js'
以上包含了所有目前miki 可用的游戏相关模块 游戏初始化:以vue 为例:
//创建vue组件
<template>
<div class="stage" style="margin:0 auto;height:1200px;">
<!--游戏组件容器,将会在class 为canvas的位置放置canvas画布-->
<div class="mycanvas" ref="farm" width='750' height='1200'></div>
</div>
</template>
初始化游戏
import {miki,resource,stage,frameSprite,sprite,textField} from '@/lib/MIKI/index.js'
......
//初始化canvas
this.canvas=document.createElement('canvas');
//dom中增加canvas
document.getElementByClass('mycanvas')[0].appendChild(this.canvas);
//miki 初始化
//默认开启webgl。如果不支持webgl,会自动降级至 2d渲染
miki.init(this.canvas,'webgl','h5');
//开始渲染。一般在场景素材都加载完成之后调用
miki.render();
以上只是做到了miki的初始化,页面上除了白屏什么都看不到。 接下来将告知如何往画面上添加游戏元素。
miki中有3个重要的模块:
- 以DisplayObjectContainer为主并在此基础上扩展的"显示列表系统"
- resource 素材管理系统
- render 渲染系统。
- 素材管理系统用于加载游戏需要的相关素材。
- 显示列表内的元素调用素材管理系统中的素材与之绑定。
- 最终再交由render系统渲染。
模块与模块之间会通过其依赖的shinEventDispatcher (自定义事件)进行消息的传递。 如果遇到 ShinEvent 或者 ShinEventDispatcher 模块找不到的情况出现,可以先执行下面的代码安装依赖:
npm install --save shinevent
所以一套完整的游戏执行流程大致如下:
import {miki,resource,stage,frameSprite,sprite,textField} from '@/lib/MIKI/index.js'
......
//监听resource 的资源载入事件
resource.RES.addEventListener('loading',this.handleLoading,this);
//监听resource 的资源加载完成事件
resource.RES.addEventListener('loaded',this.handleLoaded,this);
//开始初始化资源配置
this.initResource();
......
initResource(){
//加载818/boom下的9张图片作为素材
for(var i=1;i<=9;i+=2){
//因为融合和vue的脚手架,所以可以直接用require作为资源载入的路径,并配置上资源名称以及资源的组别
resource.RES.pushResource(require(`../../../assets/farm/818/boom/boom${i}.png`),`boom${i}`,'boom');
}
//素材开始i加载
resource.RES.load();
}
handleLoading(e){
//e.data 为资源的加载进度
console.log(e.data)
}
handleLoaded(e)
{
//游戏开始执行渲染
miki.render();
//新建序列帧播放对象
const boom=new frameSprite();
//根据资源组别名称获取名为boom的资源列表
const boom_textures=resource.getResourceByGroupName('boom');
//怎加播放名为playname的播放标签
boom.addTagByGroup(boom_textures,'playme');
boom.addEventListener('addedtostage',this.handleBoomAdded,this);
//miki中的stage 为全局舞台,添加boom元素。boom在被添加至stage的同时会触发 addedtostage 事件。
stage.addChild(boom);
boom.x=100;
boom.y=100;
}
handleBoomAdded(e)
{
// boomAdded后播放playme标签
e.currantTarget.playTagName('playme');
}
以上就往画面中新增加了一名为boom的序列帧播放元件,序列帧一共9帧。
页面上所有可是元素可以通过addChild或者removeChild的方法实现增加和删除功能
后面的wiki将重点讲述 显示列表系统的相关属性和方法