字节跳动 录屏功能_字节跳动小游戏

本文介绍了字节跳动小游戏的开发流程,包括安装开发工具、配置文件解析以及核心API的使用。文章详细讲解了如何创建Canvas、处理触摸事件、实现动画效果,并阐述了开放数据域的概念,以及如何在主域和开放数据域之间进行通信。此外,还提到了关系链数据的使用和运行时限制,为开发者提供了完整的游戏开发指导。
摘要由CSDN通过智能技术生成

字节跳动小游戏是一种开放能力。允许用户基于给定的 API 编写游戏代码,最终生成可运行在接入小游戏功能的各产品 APP 上。

快速上手

安装开发工具

前往开发者工具下载页面 ,根据自己的操作系统下载对应的安装包进行安装。

文件结构.

├── game.js => 小游戏入口文件

├── game.json => 小游戏配置文件

└── project.config.json => 工程配置文件

以上三个文件为小游戏的三个必要文件,开发者如有其它资源可以在根目录下自由建立 js, audio, images 等目录,规范自己的开发文件。

配置

game.json 示例{

"deviceOrientation": "portrait",

}

deviceOrientation

说明

portrait

竖屏

landscape

横屏

project.config.json 示例{

"description": "项目描述",

"setting": {

"es6": true, // 声明使用的 js 语法版本

}

}

平台能力

tt API

本平台只能使用 JavaScript 来编写小游戏。小游戏的运行环境是一个 绑定了一些方法的 JavaScript VM。不同于浏览器,这个运行环境没有 BOM 和 DOM API,只有 tt系列 API。接下来我们将介绍如何用 tt API 来完成创建画布、绘制图形、显示图片以及响应用户交互等基础功能。

创建 Canvasvar canvas = tt.createCanvas();

通过调用 tt.createCanvas() 接口,可以创建一个 Canvas 对象。用户第一次调用时, 获取到的是一个上屏 Canvas,该 Canvas 已经显示在了屏幕上,且与屏幕等宽等高。小游戏运行期间,有且仅有一个上屏 Canvas。

绘制var context = canvas.getContext("2d");

context.fillStyle = "#ff00ff";

context.fillRect(0, 0, 100, 100);

触摸事件

平台提供了一系列监听触摸事件的 API:

动画能力

开发者可以利用定时器相关 API 实现动画效果,如下

全局对象

小游戏的运行环境不同于 Web 环境,在真机上运行时,没有BOM API,因此也就没有 window 对象以及其上面的各种属性。所以,从 H5 迁移过来的游戏,开发者需要自己实现 window 对象的兼容(如果是利用游戏引擎开发的小游戏,导出的小游戏版本一般已经包含了一份 adapter,适配了 window 对象)。同时,在小游戏的运行环境中,提供了全局对象 GameGlobal,所有全局定义的变量都是 GameGlobal 的属性。如:setTimeout === GameGlobal.setTimeout; // true

requestAnimationFrame === GameGlobal.requestAnimationFrame; // true

同时,GameGlobal 是一个全局对象,也是一个循环引用的对象。GameGlobal.GameGlobal === GameGlobal

关系链数据使用

为了丰富游戏的社交、对战玩法,目前在字节跳动平台上,对于部分宿主 APP(如抖音),我们为小游戏提供了获取关系链数据的 API:

该接口返回的数据结构可参考 API 文档。除此之外,我们还提供了配套的操作用户数据的一系列 API:

开放数据域

为了让开发者安全使用平台的关系数据,我们提供了一个名为开放数据域的环境。这是一个封闭、独立的 JavaScript 作用域。通过在 game.json 中添加配置项 openDataContext 指定开放数据域的代码目录,来开启该项功能,以便使用对应的关系链数据接口,同时,在使用这一功能时,也会有一些限制。{

"deviceOrientation": "portrait",

"openDataContext": "src/myOpenDataContext"

}

对应的代码目录应该如下:├── src

| └── myOpenDataContext

| ├── index.js

| └── ...

├── game.js

├── game.json

└── ...

index.js 作为开放数据域的入口文件是必需的,平台构建工具会将开放数据目录下的文件自动打包为一个独立文件,其代码运行在开放数据域。而 game.js 其代码运行在主域。

注意:

主域和开放数据域中的代码不能相互 require。

主域和开放数据域的通信

开放数据域不能向主域发送消息。

主域可以向开放数据域发送消息。调用 tt.getOpenDataContext() 方法可以获取开放数据域实例,调用实例上的 OpenDataContext.postMessage() 方法可以向开放数据域发送消息。// game.js

const openDataContext = tt.getOpenDataContext();

openDataContext.postMessage({

text: "This is a test."

});

在开放数据域中通过 tt.onMessage() 方法可以监听从主域发来的消息// src/myOpenDataContext/index.js

tt.onMessage(data => {

console.log(data);

/* {

text: 'This is a test.',

} */

});

如何使用关系链数据

通过关系链 API 获取到的用户数据,在绘制排行榜等业务场景下如果想要展示,需要将排行榜绘制到 sharedCanvas 上,再在主域将 sharedCanvas 渲染上屏。可参考以下示例代码:

sharedCanvas 是主域和开放数据域都可以访问的一个离屏画布。在开放数据域调用 tt.getSharedCanvas() 将返回 sharedCanvas。根据业务逻辑获取关系链数据,然后绘制到 sharedCanvas 上。// src/myOpenDataContext/index.jsconst sharedCanvas = tt.getSharedCanvas();

const context = sharedCanvas.getContext("2d");

function drawRankList(data) {

data.forEach((item, index) => {

// ...

context.fillStyle = "red";

context.fillRect(0, 0, 100, 100);

});

}

tt.getCloudStorageByRelation({

success: res => {

const data = res.data;

drawRankList(data);

}

});

在主域中可以通过开放数据域实例访问 sharedCanvas,通过 drawImage() 方法可以将 sharedCanvas 绘制到上屏画布。//game.jsconst openDataContext = tt.getOpenDataContext();

const sharedCanvas = openDataContext.canvas;

const canvas = tt.createCanvas();

const context = canvas.getContext("2d");

context.drawImage(sharedCanvas, 0, 0);sharedCanvas 的宽高只能在主域设置,不能在开放数据域中设置。本质上其也是一个离屏 Canvas,而重设 Canvas 的宽高会清空 Canvas 上的内容。所以可以通过 postMessage 通知开放数据域去重绘 sharedCanvas 。 // game.jssharedCanvas.width = 400;

sharedCanvas.height = 200;

openDataContext.postMessage({

command: "render"

});// src/myOpenDataContext/index.js

openDataContext.onMessage(data => {

if (data.command === "render") {

// ... 重绘 sharedCanvas

}

});

运行时限制

主域

sharedCanvas 只能被绘制到上屏 canvas 上。

上屏 canvas 不能调用 toDataURL,其 context 不能调用 getImageData、readPixels。

sharedCanvas 不能调用 toDataURL 和 getContext。

不能将上屏 canvas 和 sharedCanvas 以任意形式绘制到其他 canvas 上,包括 drawImage、createPattern、texImage2D、texSubImage2D。

sharedCanvas 的宽高只能在主域设置

开放数据域

不能设置 sharedCanvas 的宽高

开放数据域的 Image 只能使用本地或者是通过 tt.xx 系列 API 拿到的平台本身的用户头像图片,不能使用开发者自己服务器上的图片。对于非本地或非用户头像图片,可以先从主域 tt.downloadFile() 下载图片文件,再通过 OpenDataContext.postMessage() 把文件路径传给开放数据域去使用。

开放数据域只能调用有限的 API,如下所示:

所有定时器相关 API

所有触摸事件 API

tt.createCanvas()

tt.createImage()

tt.getUserCloudStorage()

tt.setUserCloudStorage()

tt.removeUserCloudStorage()

tt.onMessage()

开放能力

平台允许开发者可以利用一些产品宿主提供的如登录,分享,以及不久的未来支持的支付,广告等一系列开放能力,用以完善自己的产品逻辑和体验。具体可以参考开放能力一栏。

快速调试

其他说明

代码包限制

通常情况下,每个小游戏允许上传的代码包总大小为 4MB,请开发者注意自己的游戏包大小。

文件类型

小游戏限制了可以上传的文件类型。只有在以下列表中的文件可以上传成功:

png

jpg

jpeg

gif

svg

json

js

cer

obj

dae

fbx

mtl

stl

3ds

mp3

pvr

wav

plist

ttf

fnt

gz

ccz

m4a

mp4

bmp

atlas

swf

ani

part

proto

bin

sk

mipmaps

txt

zip

tt

map

ogg

silk

dbbin

dbmv

etc

lmat

lm

ls

lh

lani

lav

lsani

ltc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值