# Cocos/Laya/Egret引擎适配
# 概述
TapTap 小游戏是一个不同于浏览器的 JavaScript 运行环境,没有 BOM 和 DOM API。然而几乎所有基于 HTML5 的游戏引擎都是依赖浏览器提供的 BOM 和 DOM API ,所以如果要在小游戏中使用游戏引擎进行开发,需要关注引擎本身是否对 TapTap 小游戏进行适配。
# 引擎适配
Cocos、Laya、Egret 引擎适配,参考转换工具使用文档 请通过开发者工单联系我们获取支持 (opens new window)
# 适配原理
基于 HTML5 的游戏引擎会依赖浏览器提供的能力实现游戏画面的绘制,游戏音频的播放等功能,而就如概述所说, TapTap 小游戏的运行环境不同于浏览器,一方面并不提供 BOM 和 DOM API,另一方面额外提供了 FileSystem 这类浏览器不具备的 API。
为了让基于 HTML5 的游戏引擎开发的游戏能够运行在 TapTap 小游戏的环境下,需要在引擎层面进行 BOM 和 DOM API 的抹平,并利用 TapTap 小游戏提供的 FileSystem 进行文件读写等操作,我们称之为 Adapter,可能不同的引擎的 Adapter 实现方案不同,但原理大致相同。
以 HTML5 createElement 为例,创建画布和图片需要使用 DOM API,依赖 document:
var canvas = document.createElement('canvas');
var img = ducument.createElement('img');
为了抹平这里的差异,引擎会构造一个 document,使用 TapTap 小游戏提供的 API 来实现对应的功能,比如 tap.createCanvas 和 tap.createImage 等。
// document
var document = {
// ...
createElement: function createElement(tagName) {
if (tagName === 'canvas') {
return new _Canvas["default"]();
} else if (tagName === 'audio') {
return new _Audio["default"]();
} else if (tagName === 'img') {
return new _Image["default"]();
} else if (tagName === 'video') {
return new _HTMLVideoElement["default"]();
}
return new _HTMLElement["default"](tagName);
},
// ...
}
// canvas
function Canvas() {
var canvas = tap.createCanvas();
canvas.type = 'canvas';
// ...
return canvas;
}
除 createElement 外,引擎会抹平差异的差异还有很多:
- touch 事件
- 缓存
- 音频
- 图片
- socket
- request
- ......
后续新增的基础能力平台也会和引擎协作使开发者低成本的接入,不过平台提供的开放能力(比如广告,支付)还是需要开发者主动通过 tap api 的方式接入。