字节摄像头小游戏开发教程(字节小游戏个人开发)
sinye56 2024-10-23 14:23 16 浏览 0 评论
背景
字节小游戏:字节小游戏是基于字节跳动全产品矩阵开发,不需用户进行下载,点开即玩的全新游戏类型。相较 APP,小游戏有着开发周期短、开发成本低等特性,能够让开发者更简单的参与到开发过程中。实现快速上线,快速变现。
摄像头游戏:一种全新的游戏形式。玩家通过摄像头采集到的图像信息,控制游戏中的行为。抖音中的《眼睛眨眨》、《潜水艇大挑战》就是摄像头游戏的一个成功例子。
如果你已经有了小游戏开发的相关基础,那么如何进行摄像头游戏的开发呢?本文将使用字节跳动创意游戏前端团队开发的摄像头sdk,简单介绍一下如何快速从零开发一款字节平台的摄像头游戏。
介绍
摄像头 SDK是允许开发者接入摄像头互动类场景游戏的 API 集合。SDK 本身是基于字节小游戏运行环境的,主要提供了人脸识别、手势识别、摄像头UI显示等调试能力,降低开发者接入成本。
快速上手
举个例子:下面我们将使用cocos creator来开发一款仿抖音《潜水艇大作战》的摄像头小游戏。玩家通过鼻子控制潜水艇躲过障碍,躲过的障碍越多,分数越高,最终赢得游戏。默认大家已经完成了cocos creator的基础教程学习,本文章中将不会过多介绍Cocos Creator的开发方法,如果还没有Cocos Creator的开发经验建议先学习官方教程。
- 摄像头游戏的完整工程地址:https://github.com/congyd/camera-video
项目创建
第一步是安装Cocos Creator的编辑器,我们从官网上下载CocosDashboard用来创建Cocos Creator工程
下载完成安装后,我们登陆CocosDashboard,进入编辑器的侧边栏,这里我们使用下载的v2.4.2版本,此版本开始支持打包成字节小游戏,打包后可以直接在字节跳动开发者工具上运行。
安装完成后我们在项目侧边栏中选择新建一个Creator项目。
这里我们注意选择的版本和创建的项目类型,此次项目我们采用TypeScript开发,所以初始默认选择TypeScript项目,然后创建打开项目。
这样我们就得到了一个新建的Cocos Creator工程。
摄像头SDK安装
我们现已将摄像头SDK发布到npm上,使用过NodeJS的同学一定对npm并不陌生,如果没有使用过NodeJS也可查看官网并安装。
进入项目文件夹根目录使用npm安装摄像头sdk、安装cocos引擎适配包,依次执行下方命令
npm install @byted-creative/camera @byted-creative/camera-face
npm install @byted-creative/camera-cocos-layer
我们在Script文件夹中创建一个脚本main
双击打开Main脚本,引入摄像头SDK包
import camera, { CameraCapacity } from '@byted-creative/camera';
import face, { FaceEvent, FaceInfo } from '@byted-creative/camera-face';
import { CameraCocosLayer } from "@byted-creative/camera-cocos-layer";
创建函数initCamera在start生命周期调用,初始化摄像头能力,并开启人脸检测能力。
async start () {
await this.initCamera();
// this.startGame();
}
// 初始化
private async initCamera() {
this._layer = new CameraCocosLayer({ root: this.cameraNode });
// 初始化摄像头
camera.init({
layerAdapter: this._layer,
capacity: [CameraCapacity.Face],
});
try {
await camera.start();
// 设置美颜
camera.setBeauty({
whiten: 1,
smoothen: 1,
enlargeEye: 1,
slimFace: 1,
});
face.init({interval: 30});
face.startDetect();
// face.debugEnable(FaceDebug.Box);
// face.debugEnable(FaceDebug.Face);
} catch (err) {
console.log('camera start fail', err);
}
}
将此脚本挂载在主场景的Canvas节点上
此时预览游戏,屏幕中会展现出摄像头拍摄下来的画面(默认为前置摄像头)。
添加场景元素
接下来,将潜水艇和柱子拖到场景中
针对潜水艇,注册人脸检测事件,当事件触发时,将潜水艇的纵坐标改为人脸鼻子的纵坐标。
face.on(FaceEvent.onFaceInfos, this.onFaceInfos, this);
private onFaceInfos(faceInfos: FaceInfo[]){
if(faceInfos.length === 0){
return;
}
const faceInfo = faceInfos[0];
this.ship.setPosition(this.ship.position.x, faceInfo.nose[13].y);
}
针对柱子,开始游戏时需要初始化柱子位置,柱子的x坐标间距是相同的,但是柱子的y坐标可以是随机的,上下起伏。
this.colunms[0].setPosition(115,0);
this.colunms[1].setPosition(653,0);
this.colunms.forEach(element => {
this.resetColunmPosition(element);
});
private resetColunmPosition(node: cc.Node){
const r = Math.random() * 360 - 180;
node.setPosition(node.position.x, r);
}
在界面中,我们可以感受到潜水艇是从左到右游动,我们通过控制柱子从右向左移动也可以达到相同的效果。在update生命周期函数中,我们可以定时改变柱子的位置,视觉上看起来缓慢向左移动。代码量比较大,简化成文字,具体代码内容可以查看代码仓库
update(dt){
...
// 控制柱子从右向左移动
// 1.当柱子位置小于潜水艇,得分加一
// 2.当柱子脱离界面,重置柱子位置
}
在检测到潜水艇与柱子发生碰撞之后,游戏结束
this.ship.on('onCollision', this.onCollision, this);
onCollision(){
console.log('onCollision');
this.stopGame();
}
最后将用户开始时需要初始化的内容封装成startGame
private startGame(){
// 关闭弹窗
this.dialog.active = false;
// 重置得分
this.score = 0;
face.on(FaceEvent.onFaceInfos, this.onFaceInfos, this);
this.colunms[0].setPosition(115,0);
this.colunms[1].setPosition(653,0);
this.colunms.forEach(element => {
this.resetColunmPosition(element);
});
// 触发碰撞结束游戏
this.ship.on('onCollision', this.onCollision, this);
// 开始标记,柱子开始移动
this._startFlag = true;
}
结束游戏时,需要清空开始游戏时的监听事件
private stopGame(){
// 取消face监听事件
face.off(FaceEvent.onFaceInfos, this.onFaceInfos, this);
// 取消潜水艇碰撞监听事件
this.ship.off('onCollision', this.onCollision, this);
// 关闭标记,柱子不随时间移动
this._startFlag = false;
// 打开弹窗
this.dialog.active = true;
}
完成游戏核心逻辑之后,我们将游戏构建成字节跳动小游戏
下载字节跳动开发者工具,将构建完成的工程导入到字节跳动开发者工具中,使用真机预览。打开头条或者抖音客户端,扫描二维码,就可以看到我们开发好的摄像头游戏啦!
相关推荐
- 程序员:JDK的安装与配置(完整版)_jdk的安装方法
-
对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...
- Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置
-
一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...
- 麒麟系统安装JAVA JDK教程_麒麟系统配置jdk
-
检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...
- 学习笔记-Linux JDK - 安装&配置
-
前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 测试员必备:Linux下安装JDK 1.8你必须知道的那些事
-
1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...
- Linux 下安装JDK17_linux 安装jdk1.8 yum
-
一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...
- 在Ubuntu系统中安装JDK 17并配置环境变量教程
-
在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...
- 如何在 Linux 上安装 Java_linux安装java的步骤
-
在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...
- Windows和Linux环境下的JDK安装教程
-
JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...
- linux安装jdk_linux安装jdk软连接
-
JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...
- linux安装jdk,全局配置,不同用户不同jdk
-
jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...
- 运维大神教你在linux下安装jdk8_linux安装jdk1.7
-
1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...
- window和linux安装JDK1.8_linux 安装jdk1.8.tar
-
Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...
- 最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?
-
默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)