游戏 Game

Game 是游戏对象,通过 Game 实例上的方法,控制游戏暂停、继续。通过将 System 添加到 Game 上让游戏能够支持不同的能力,这些能力都是通过组件添加到 GameObject 上展现出来的。

创建游戏

  1. <style>
  2. #canvas {
  3. width: 100%;
  4. height: auto;
  5. }
  6. </style>
  7. <canvas id="canvas"></canvas>
  1. import { Game } from '@eva/eva.js'
  2. import { RendererSystem } from '@eva/plugin-renderer'
  3. // 创建渲染系统
  4. const rendererSystem = new RendererSystem({
  5. canvas: document.querySelector('#canvas'), // 可选,自动生成canvas 挂在game.canvas上
  6. width: 750, // 必填
  7. height: 1000, // 必填
  8. transparent: false, // 可选
  9. resolution: window.devicePixelRatio / 2, // 可选, 如果是2倍图设计 可以除以 2
  10. enableScroll: true, // 允许页面滚动
  11. renderType: 0 // 0:自动判断,1: WebGL,2:Canvas,建议android6.1 ios9 以下使用Canvas,需业务判断。
  12. })
  13. // 初始化游戏
  14. const game = new Game({
  15. frameRate: 60, // 可选
  16. autoStart: true, // 可选
  17. systems: [rendererSystem]
  18. })

添加系统

有两种方式添加系统,一种是在 Game 实例化的时候,传入构造函数的 systems 参数中,比如 rendererSystem 渲染能力是必备的,可以通过这种方式添加。另外一种是在创建游戏后调用游戏实例上面的 addSystem 方法添加。Eva.js 提供了很多系统,这些系统都是作为插件单独在一个 package 中,比如,如果我们想检测帧率,可以使用 @eva/plugin-stats 插件。

  1. import { StatsSystem } from '@eva/plugin-stats'
  2. const statsSystem = new StatsSystem({
  3. show: true, // 这里设置是否显示 fps 面板
  4. style: {
  5. x: 0, // 这里的数值全部都是屏幕宽度的百分比 单位vw
  6. y: 50,
  7. width: 20,
  8. height: 12
  9. }
  10. })
  11. game.addSystem(statsSystem)

获取系统

  1. import { StatsSystem } from '@eva/plugin-stats'
  2. const stats = game.getSystem(StatsSystem) // 通过类获取系统
  3. // or
  4. const stats = game.getSystem('StatsSystem') // 通过系统名获取系统

开始游戏

  1. game.start()

暂停游戏

建议在应用退出到后台时暂停游戏,返回后开始

  1. game.pause()

多场景管理

切换场景

  1. import { Scene } from '@eva/eva.js'
  2. const scene = new Scene('bg')
  3. game.loadScene({
  4. scene,
  5. mode: LOAD_SCENE_MODE.SINGLE
  6. })

渲染到多个 canvas

在项目中,游戏默认会渲染到一个默认 canvas 上,当我们会有渲染到多个 canvas 上的需求,可以将该场景渲染到另一个 canvas 上。

  1. import { Scene, LOAD_SCENE_MODE } from '@eva/eva.js'
  2. const scene = new Scene('bg')
  3. game.loadScene({
  4. scene,
  5. mode: LOAD_SCENE_MODE.MULTI_CANVAS,
  6. params: {
  7. // 这里和RendererSystem 参数相同
  8. canvas: document.querySelector('#canvas'), //可选,自动生成canvas 挂在game.canvas上
  9. width: 750, //必填
  10. height: 1000, // 必填
  11. transparent: false, // 可选
  12. resolution: window.devicePixelRatio / 2, // 可选, 如果是2倍图设计 可以除以 2
  13. enableScroll: true, // 允许页面滚动
  14. renderType: 0
  15. // 0:自动判断,1: WebGL,2:Canvas,建议android6.1 ios9 以下使用Canvas,需业务判断。
  16. }
  17. })

Ticker

增加每帧执行的方

建议在Component中的update方法实增加每帧执行的方法,也可以使用add 方法,该方法将会在所有System的lateUpdate执行后执行

  1. game.ticker.add((e: UpdateParams)=>{
  2. })

修改游戏播放速度

  1. game.ticker.setPlaybackRate(1.5) // 1.5倍速播放