快速开始
Demo 项目
基于 webpack 创建的 demo 项目:https://github.com/eva-engine/start-demo
安装
使用 NPM
npm install @eva/eva.js
在浏览器中
<script src="https://unpkg.com/@eva/eva.js@1.1.x/dist/EVA.min.js"></script>
创建画布
Eva.js 依赖于 HTML 中的 canvas 进行绘制。如果设计稿中的宽高是固定的(例如 750px*1000px)又占满全屏,我们可以设置 canvas 的 css 宽度为 100%,高度为 auto。
<style>#canvas {width: 100%;height: auto;}</style><canvas id="canvas"></canvas>
添加资源
在创建游戏之前,我们需要添加资源文件到资源管理器中,这里我们添加两个图片资源。当然还可以添加龙骨动画、spine 动画资源,更多请看资源管理。
import { resource, RESOURCE_TYPE } from '@eva/eva.js'resource.addResource([{name: 'image1',type: RESOURCE_TYPE.IMAGE,src: {image: {type: 'png',url: 'https://gw.alicdn.com/tfs/TB1DNzoOvb2gK0jSZK9XXaEgFXa-658-1152.webp'}},preload: true},{name: 'image2',type: RESOURCE_TYPE.IMAGE,src: {image: {type: 'png',url: 'https://gw.alicdn.com/tfs/TB15Upxqk9l0K4jSZFKXXXFjpXa-750-1624.jpg'}},preload: true}])
创建游戏
Eva.js 内核是一个非常轻量级的运行时,其他功能都是通过插件的方式实现的,如果想实现游戏最基础的渲染能力,需要安装渲染插件 @eva/plugin-renderer。
npm i @eva/plugin-renderer
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倍图设计 可以除以2enableScroll: true, // 允许页面滚动renderType: 0 // 0:自动判断,1: WebGL,2:Canvas,建议android6.1 ios9 以下使用Canvas,需业务判断。})// 创建游戏对象const game = new Game({frameRate: 60, // 可选,游戏帧率,默认60autoStart: true, // 可选,自动开始systems: [rendererSystem]})
当然这样只让 Eva.js 有了基础的渲染能力,但是 canvas 上还没有展示任何元素,接下来我们将添加 gameObject,它将会展现在画布上。
添加游戏对象
创建完游戏后,我们需要在游戏里面添加一个游戏对象,并且给游戏对象添加组件。游戏对象是游戏中最基本的可操作单位,而组件则赋予了游戏对象各种能力,比如 Img 组件让一个 gameObject 展示一张图片。
- 使用 NPM
npm i @eva/plugin-renderer
- 在浏览器中
<!-- import PixiJS --><script src="//unpkg.com/pixi.js@4.8.9/dist/pixi.min.js"></script><!-- import RendererAdapter --><script src="//unpkg.com/@eva/renderer-adapter@1.1.x/dist/EVA.rendererAdapter.min.js"></script><script src="https://unpkg.com/@eva/plugin-renderer@1.1.x/dist/EVA.plugin.renderer.min.js"></script><script src="//unpkg.com/@eva/plugin-renderer-img@1.1.x/dist/EVA.plugin.renderer.img.min.js"></script>
import { GameObject } from '@eva/eva.js'import { Img, ImgSystem } from '@eva/plugin-renderer-img' // 引入渲染图片所需要的组件和系统game.addSystem(new ImgSystem()) // 给游戏添加渲染图片的能力const gameObject = new GameObject('gameObj1', {size: {width: 658,height: 1152}})gameObject.addComponent(new Img({resource: 'image1'}))game.scene.addChild(gameObject) // 把游戏对象放入场景,这样画布上就可以显示这张图片了
组件管理
获取组件
方式 1:创建时保留组件
const img = gameObject.addComponent(new Img({resource: 'image1'}))// orconst img = new Img({ resource: 'image1' })gameObject.addComponent(img)
方式 2:创建后从游戏对象上获取
const img = gameObject.getComponent(Img)// orconst img = gameObject.getComponent('Img')
修改组件属性
img.resource = 'image2' // 切换资源名称,要确保资源已经被添加到资源管理器
准备好了吗?
刚刚介绍了 Eva.js 最简单的 demo,接下来我们看一些 2D 互动游戏常用能力。