游戏 Game
Game 是游戏对象,通过 Game 实例上的方法,控制游戏暂停、继续。通过将 System 添加到 Game 上让游戏能够支持不同的能力,这些能力都是通过组件添加到 GameObject 上展现出来的。
创建游戏
<style>
#canvas {
width: 100%;
height: auto;
}
</style>
<canvas id="canvas"></canvas>
import { Game } from '@eva/eva.js'
import { RendererSystem } from '@eva/plugin-renderer'
// 创建渲染系统
const rendererSystem = new RendererSystem({
canvas: document.querySelector('#canvas'), // 可选,自动生成canvas 挂在game.canvas上
width: 750, // 必填
height: 1000, // 必填
transparent: false, // 可选
resolution: window.devicePixelRatio / 2, // 可选, 如果是2倍图设计 可以除以 2
enableScroll: true, // 允许页面滚动
renderType: 0 // 0:自动判断,1: WebGL,2:Canvas,建议android6.1 ios9 以下使用Canvas,需业务判断。
})
// 初始化游戏
const game = new Game({
frameRate: 60, // 可选
autoStart: true, // 可选
systems: [rendererSystem]
})
添加系统
有两种方式添加系统,一种是在 Game 实例化的时候,传入构造函数的 systems
参数中,比如 rendererSystem
渲染能力是必备的,可以通过这种方式添加。另外一种是在创建游戏后调用游戏实例上面的 addSystem
方法添加。Eva.js 提供了很多系统,这些系统都是作为插件单独在一个 package 中,比如,如果我们想检测帧率,可以使用 @eva/plugin-stats
插件。
import { StatsSystem } from '@eva/plugin-stats'
const statsSystem = new StatsSystem({
show: true, // 这里设置是否显示 fps 面板
style: {
x: 0, // 这里的数值全部都是屏幕宽度的百分比 单位vw
y: 50,
width: 20,
height: 12
}
})
game.addSystem(statsSystem)
获取系统
import { StatsSystem } from '@eva/plugin-stats'
const stats = game.getSystem(StatsSystem) // 通过类获取系统
// or
const stats = game.getSystem('StatsSystem') // 通过系统名获取系统
开始游戏
game.start()
暂停游戏
建议在应用退出到后台时暂停游戏,返回后开始
game.pause()
多场景管理
切换场景
import { Scene } from '@eva/eva.js'
const scene = new Scene('bg')
game.loadScene({
scene,
mode: LOAD_SCENE_MODE.SINGLE
})
渲染到多个 canvas
在项目中,游戏默认会渲染到一个默认 canvas 上,当我们会有渲染到多个 canvas 上的需求,可以将该场景渲染到另一个 canvas 上。
import { Scene, LOAD_SCENE_MODE } from '@eva/eva.js'
const scene = new Scene('bg')
game.loadScene({
scene,
mode: LOAD_SCENE_MODE.MULTI_CANVAS,
params: {
// 这里和RendererSystem 参数相同
canvas: document.querySelector('#canvas'), //可选,自动生成canvas 挂在game.canvas上
width: 750, //必填
height: 1000, // 必填
transparent: false, // 可选
resolution: window.devicePixelRatio / 2, // 可选, 如果是2倍图设计 可以除以 2
enableScroll: true, // 允许页面滚动
renderType: 0
// 0:自动判断,1: WebGL,2:Canvas,建议android6.1 ios9 以下使用Canvas,需业务判断。
}
})
Ticker
增加每帧执行的方
建议在Component中的update方法实增加每帧执行的方法,也可以使用add
方法,该方法将会在所有System的lateUpdate执行后执行
game.ticker.add((e: UpdateParams)=>{
})
修改游戏播放速度
game.ticker.setPlaybackRate(1.5) // 1.5倍速播放