百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

字节摄像头小游戏开发教程(字节小游戏个人开发)

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像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: