胖头猫游戏提供热门游戏下载和手游攻略!

《揭秘字节跳动摄像头小游戏开发全解析》

发布时间:2024-10-16浏览:95

背景

字节小游戏:字节小游戏是基于字节跳动全产品矩阵开发,不需用户进行下载,点开即玩的全新游戏类型。相较 APP,小游戏有着开发周期短、开发成本低等特性,能够让开发者更简单的参与到开发过程中。实现快速上线,快速变现。

摄像头游戏:一种全新的游戏形式。玩家通过摄像头采集到的图像信息,控制游戏中的行为。抖音中的《眼睛眨眨》、《潜水艇大挑战》就是摄像头游戏的一个成功例子。

介绍

摄像头 SDK是允许开发者接入摄像头互动类场景游戏的 API 集合。SDK 本身是基于字节小游戏运行环境的,主要提供了人脸识别、手势识别、摄像头UI显示等调试能力,降低开发者接入成本。

快速上手

摄像头游戏的完整工程地址: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-facenpm 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; }

完成游戏核心逻辑之后,我们将游戏构建成字节跳动小游戏

下载字节跳动开发者工具,将构建完成的工程导入到字节跳动开发者工具中,使用真机预览。打开头条或者抖音客户端,扫描二维码,就可以看到我们开发好的摄像头游戏啦!

用户评论

满心狼藉

这款《字节摄像头小游戏开发教程》真不错,我学到了很多相机操作技巧。

    有7位网友表示赞同!

断秋风

跟着教程做,感觉制作自己的小游戏离我不远了。

    有18位网友表示赞同!

墨染殇雪

教程里的例子很有趣,让人迫不及待想动手试一试。

    有20位网友表示赞同!

怀念·最初

小白也能学会的教程,赞一个!

    有19位网友表示赞同!

暖栀

学习了这款游戏的开发教程,我的技术提升了不少。

    有8位网友表示赞同!

凉月流沐@

视频里面的讲解很详细,跟着步骤做就成啦!

    有17位网友表示赞同!

在哪跌倒こ就在哪躺下

用这个教程做了个小游戏,朋友都说不错!

    有13位网友表示赞同!

半世晨晓。

这个教程完全免费,太棒了,感谢作者分享。

    有20位网友表示赞同!

醉婉笙歌

摄像头小游戏的创意真的很多,学到了不少灵感。

    有16位网友表示赞同!

念旧情i

教程里的代码写得很有条理,很容易看懂。

    有12位网友表示赞同!

苏莫晨

教程对新手非常友好,我一下子就上道了。

    有16位网友表示赞同!

命里缺他

这个小游戏开发教程挺全面,包括了很多知识点。

    有13位网友表示赞同!

花花世界总是那么虚伪﹌

跟着教程完成的小游戏,感觉自己成为了一名小小开发者!

    有15位网友表示赞同!

心已麻木i

学完这个教程,我觉得可以尝试更多创意的游戏设计了。

    有8位网友表示赞同!

七夏i

感谢字节为大家提供的这款实用的摄像头小游戏开发教程。

    有19位网友表示赞同!

日久见人心

教程里的案例都很实用,直接就能应用到实际项目中去。

    有20位网友表示赞同!

北朽暖栀

小白也能轻松上手的教程,让我对编程有了新的认识!

    有20位网友表示赞同!

浅嫣婉语

这个教程内容丰富,学到了很多之前不知道的知识点。

    有7位网友表示赞同!

何年何念

教程让我明白了摄像头小游戏的奥秘,太给力了!

    有17位网友表示赞同!

西瓜贩子

学会了这款小游戏开发教程,感觉整个游戏行业都变得有趣起来。

    有6位网友表示赞同!

热点资讯