cocos creator制作微信抖音小游戏《黄金矿工》

2023-10-28

微信小游戏,抖音小游戏,非常适合个人开发者创业,不用版号,门槛低,同时抖音小游戏的系统算法推荐,能让好的游戏脱颖而出, 你要做的就是把游戏做好就可以了。

这个系列的文章,配套了视频教程讲解与课程资源,课程源码。下面开始讲解黄金矿工的具体制作流程。

这里有个cocos creator学习交流小组点击可以直接加入,一起学习交流吧

1:开发工具的基本使用

教程的开发工具选用cocos creator, 开发语言选用TypeScript。首先我们创建项目,导入素材,素材如图:

项目路径不要使用中文和空格,使用英文或英文缩写,项目工程里面的目录结构要清晰,在Assets下面我们分成Res, Scene, Scripts,。

2: 搭建《黄金矿工》游戏场景

一般做一个2D游戏,我们会把一个游戏的场景分成下面几个层次:

a: 游戏背景层 b: 游戏地图层 c: 角色物品层, d: 游戏UI层,我们按照这个层次,把黄金矿工的游戏地图分类进行放好,如图:

BackGound: 背景层,

LogicMap: 逻辑地图层,黄金矿工还有什么地图呢?主要是要把边缘表示出来, 我们使用了碰撞检测系统, 所以把边缘堵上墙,作为我们的逻辑地图,也就是加Box碰撞器,如图:

GoldRoot 黄金物品的跟节点,所有的黄金生成出来后都放这个根节点下。

Player: 游戏主角,就是我们的矿工的绳子和钩子。这个制作的时候一个技巧,主角是由绳子,和绳子断点上的金属圆环组成。

Player的原点在绳子的一头,所以绳子作为Player的孩子,锚点要为[0.5, 1], 绳子的长度可能会变化,我们修改body的高度就可以让绳子有变化。比如绳子长度为200,我们把body这个节点的高度改成200,即可

金属探测圆环,我们命名为header, header 的位置是与绳子的高度相关的,在最下面,我们观察一下坐标,

得到一个结果, header的坐标: -(绳子长度 + 10)。

UIRoot层:用来放我们用户的UI操作相关。

场景搭建就此搭建完毕。

3: Type Script代码开发

Step1: 新建一个组件类,被引擎识别, 这个非常简单,直接右键新建一个TS脚本即可

Step2: new 组件实例,到场景的节点上。这个有两种方式,可以编辑器添加组按钮来添加, 可以代码addComponent(类型)添加, 本质 new 组件类的实例添加到节点上。

Step3: 游戏引擎特定时期,调用特定的入口, 我们写代码如果没有人调用是不值钱的,所以必须要让引擎调用到,引擎会在特定的时期,调用我们特定的入口,我们只要往特定的入口插入代码即可,开始运行之前调用 组件实例.start();每次刷新的时候调用组件实例.update(),等这些规定的接口。引擎通过运行场景,找到场景的节点,找到节点上组件实例,来获得组件实例,这也就是组件实例为什么一定要添加到节点上就是这个原因。

4: TypeScript 代码模板介绍:

cc: cocos creator;

cc._decorator: 名字空间,定义了装饰器/注解

ccclass: 装饰/注解 一个类是一个组件类; property: 装饰/注解 一个类的数据成员 绑定到编辑器;

@开头表示装饰注解

cc.Component: 组件类的基类;

export default: 外部要使用这个类,import default 来获取这个类型;

@ccclass

export default class GameMgr extends cc.Component {

// 权限 名字: 类型 = 默认值;

@property

private isDebug: boolean = false;

}

5: 黄金矿工核心思路分析

黄金矿工游戏玩法中,要碰到黄金等物品,还有要碰到边缘等物品,所以我们要利用碰撞检测系统来做碰撞检测。

Setp1: 开启碰撞检测, 分为两个步骤,代码如下:

// 开启碰撞检测,一定要在onLoad里面

onLoad () {

// step1: 开启碰撞检测系统, 默认是关闭;

cc.director.getCollisionManager().enabled = true;

// step2: 配置调试区域, debugDraw

if(this.is_debug) {

cc.director.getCollisionManager().enabledDebugDraw = true;

}

else {

cc.director.getCollisionManager().enabledDebugDraw = false;

}

}

Step2: 编辑碰撞区域。

黄金需要编辑碰撞区域,游戏地图的3个边需要编辑碰撞区域, 矿工的圆形金属探测器需要添加碰撞器。

Step3: 类型配置与碰撞关系配置。

这个案例里面我们把物体分成了类型有:边缘(BORD), 黄金Gold, 探测器Header。分别设置好对应节点的类型。

Step4: 碰撞检测,我们让金属探测器Header来做碰撞,碰撞检测记住一点,那个碰撞器检测碰撞,就把碰撞检测的代码挂到那个碰撞器对应的节点上,所以新建一个代码来做碰撞检测,实现碰撞检测的函数入口

const {ccclass, property} = cc._decorator;

@ccclass

export default class HeaderCtrl extends cc.Component {

onCollisionEnter(other, self): void {

}

}

Step5:配置好碰撞关系,哪些类型与哪些类型碰撞,如图

黄金矿工会有多个游戏状态,我们这里将其进行分类:

状体1: 我们的钩子摆来摆去; --->Idle

状态2: 我们的钩子发射出去 ---> Shoot

状态3: 碰到边缘我们就弹回来; ---> Back

状态4: 如果状态的是黄金我们就把黄金拖回来; BackWithGold

如果还有其他的状态,你也可以定义好, 我们编写一个GameMgr代码,管理整个游戏,在这个代码里面定义好状态:

var State = {

Idle: 0,

Shoot: 1,

Back: 2,

BackWithGold: 3,

};

状态定义完成以后,我们分析一下状态变化的条件,整理如下:

状态1---》状态2: (用户点击了屏幕)

状态2---》状态3:(钩子撞到了边缘)

状态2----》状态4(碰到的是黄金)

状态3/状态4 ---》状态1: 绳子拖回来以后,我们便回到状态1

每个状态的动画,我们编写一个函数,用来实现如下图,在update里面:

// 1===============1===============1===============1=======dt========1

// dt: 迭代,100 * dt

update(dt: number): void {

if(this.state === State.Idle) {

this.idleUpdate(dt);

return;

}

else if (this.state === State.Shoot) {

this.shootUpdate(dt);

return;

}

else if(this.state === State.Back) {

this.backUpdate(dt);

return;

}

else if (this.state == State.BackWithGold) {

this.balckWithGoldUpdate(dt);

return;

}

}

把状态显示的接口完成后,接下来编写状态改变条件。

用户点击屏幕,idle-Shoot状态,代码如图:

this.node.on(cc.Node.EventType.TOUCH_START, this.onTouchStart, this);

private onTouchStart(): void {

if (this.state !== State.Idle) {

return;

}

this.state = State.Shoot;

}

状态改变的代码一定要加一个逻辑,就是当前状态的判断。

碰到物体后,状态改变,所以,当金属圆圈,检测到碰撞的时候,调用GameMgr的接口,进入判断检测函数。

HeaderCtrl.ts 在碰撞函数里面添加

GameMgr.Instance.onGameCollisionEnter(other, self);

GameMgr.ts里面实现:

public onGameCollisionEnter(other, self): void {

if (this.state !== State.Shoot) {

return;

}

if (other.node.groupIndex === 2) { // 边缘

this.state = State.Back;

}

else if (other.node.groupIndex === 3) { // 黄金

this.state = State.BackWithGold;

}

}

状态迁移改变完成了以后,我们就是实现每种状态的动画了,这里我重点要介绍一个函数,

private setRopeLen(len: number): void {

this.ropeBody.height = len;

this.header.y = -(len + 10);

}

这个函数,可以修改绳子的长度,这样,等绳子抛出去,与拖回来都可以用。

状态迁移逻辑框架实现后,最后我们来往每种状态里面加代码。

Idle:

定义一个角速度,定义当前角度,update不断累加,如果超过左边,就转变方向

如果超过右边,也换个方向到左边。

private idleUpdate(dt: number): void {

this.nowDegree += (this.wSpeed * dt);

this.player.angle = this.nowDegree;

if (this.nowDegree <= -60) {

this.wSpeed = -this.wSpeed;

}

else if(this.nowDegree >= 60) {

this.wSpeed = -this.wSpeed;

}

}

Shoot:

定一个绳子生长的速度,每次update, 绳子长度变化(速度*时间)

private shootUpdate(dt: number): void {

this.nowLen += (this.shootSpeed * dt);

this.setRopeLen(this.nowLen);

}

Back:

碰到边缘返回,直接把绳子的长度,由Shoot的变长,变成变短,所以是减。

private backUpdate(dt: number): void {

this.nowLen -= (this.shootSpeed * dt);

if (this.nowLen <= 100) {

this.nowLen = 100;

this.state = State.Idle;

}

this.setRopeLen(this.nowLen);

}

BackWithGold:

勾上黄金的状态,我就留给大家自己来写了。

private balckWithGoldUpdate(dt: number): void {

}

这样就实现了黄金矿工的核心玩法。本次课除了有文字,还配备有 完整视频教程,游戏素材,课程代码,需要的可以进入交流小组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cocos creator制作微信抖音小游戏《黄金矿工》 的相关文章

  • unity按钮点击无响应的处理方法

    在程序中给Button控件添加了点击事件后无反应 可能由于下列原因导致 按钮的interactable false或者enable false 父节点如果有CanvasGroup组件 还必须把CanvasGroup组件上的interacta
  • Unity normalized的坑

    注意 向量太小会返回0 所以要考虑等于000的情况 我们的项目恰恰会用到 normalized返回的值传给 Quaternion LookRotation 结果造成000错误 切记要考虑到 normalized 为0 的情况
  • [Unity2D]在2D游戏里面实现人物的移动[消除抖动]

    Unity2D 在2D游戏里面实现人物的移动 先来一张效果图 一般的Unity2D游戏中 用WASD控制来移动人物角色的移动 缺陷 与含有碰撞器的强行碰撞时会发生抖动 原因 例如我人物要向左边走 利用脚本获取键盘输入 给人物角色一个向左边的
  • UE4 跑酷游戏-得分机制

    得分机制 1 这次我们要做的是得分 根据人物跑过的地板来得取分数 首先进入我们的第三人称游戏模式里面 创建一些变量 2 退出第三人称游戏模式后 进入主地板蓝图后 在销毁地板之前写读取人物跑i过地板块数进行得分
  • UE4 材质 生成随机数

    参考之前的文章中关于随机数和noize的 https papalqi cn 201707 cid 558 html
  • 【游戏客户端面试题干货】--2021年最新游戏客户端面试干货(lua篇)

    游戏客户端面试题干货 2021年度最新游戏客户端面试干货 lua篇 大家好 我是Lampard 经过春招一番艰苦奋战之后 我终于是进入了心仪的公司 今天给大家分享一下我在之前精心准备的一套面试知识 今天和大家分享的是lua的面试题 本人亲测
  • Unity3d 制作一个简单的NPC对话系统

    制作一个简单的NPC对话系统 文章目录 制作一个简单的NPC对话系统 前言 效果展示 进入对话区域 开始对话 Inspector面板可调选项 准备工作 NPC UI 代码 完整代码 详细逻辑 开启对话 显示对话 头顶标识 头顶标识 后话 前
  • 在Unity中 改变地形(Terrain),并加上水面、树、草地、材质(地板上色)

    在Unity中 如何使用地形 Terrain 并加上水面 树 草地 材质 地板上色 目录 在Unity中 如何使用地形 Terrain 并加上水面 树 草地 材质 地板上色 一 水面素材包 导入 二 地形 Terrain 地貌设置 地形上升
  • 游戏开发 - 开发流程 - 收集

    1 应用场景 主要用于了解 掌握游戏开发的整个流程 2 学习 操作 1 文档阅读 复习课 带你梳理客户端开发的三个重点 极客时间 2 整理输出 2 1 游戏开发流程 参考 按照游戏开发中的三大模块策划 程序 美术 画了一个图 开发游戏的时候
  • cocos2d-x实例学习(8)之CCJumpTo和CCJumpBy

    CCJumpTo和CCJumpBy概念 CCJumpTo 把某一CCSprite跳到某一位置 CCJumpBy 把某一CCSprite跳起一段距离 它有一个方法reverse 它让对象按原路径返回 CCJumpTo和CCJumpBy示例 创
  • Unity游戏开发-Assetbundle打包

    本篇主要是分享unity Assetbundle的打包处理 目录 打包接口 整体设计 打包AssetBundle 压缩资源到StreamingAssets 输出资源清单文件 清单文件结构 AssetFile AssetVersion 处理
  • 用Java开发贪食蛇小游戏

    用Java开发贪食蛇小游戏 一 实验内容 1 实现贪吃蛇游戏基本功能 屏幕上随机出现一个 食物 称为豆子 上下左右控制 蛇 的移动 吃到 豆子 以后 蛇 的身体加长一点 得分增加 蛇 碰到边界或 蛇头与蛇身相撞 蛇死亡 游戏结束 为游戏设计
  • Unity 游戏入门 九、 精灵动画 Sprite Animation

    1 Animator 为了在游戏对象上有动画 需要添加一个组件Animator 在工程窗口中 双击Robot 预制体 如图所示 添加Animator组件 2 Creating a New Controller 在工程窗口Animator文件
  • Visuial Studio 打开 Unity 新建脚本时,新脚本继承MonoBehaviour暂时失效为白色的解决方法

    点击 文件 gt 最近使用的项目和解决方案 gt 点击当前项目 即可瞬间重载当前项目 这个时候 白色的MonoBehaviour会变成绿色 就可以了 当然最传统的方法就是关掉VS再打开 不过挺浪费时间的
  • unity3D期末作业捕鱼游戏,适合初学者学习使用,包含源程序所有文件

    虚拟现实期末作业捕鱼游戏 免积分下载 点我下载资源 有按钮 背景音乐 可以发射炮弹捕鱼 可以选择难度 可以调节音乐声音大小 有游戏加载进度条 详细情况请看如下动态图 点我下载资源
  • unity中通过touch旋转、放大和缩小物体以及滑动方向的判断

    unity中通过touch旋转 放大和缩小物体以及滑动方向的判断这个需求在游戏开发中也是非常频繁 话不多说直接上代码 using System Collections using System Collections Generic usi
  • 【Unity Shader】Shadow Caster、RenderType和_CameraDepthTexture

    当我们制作某些屏幕特效时 需要取到屏幕的深度图或法线图 比如ssao 景深等 另外像是制作软粒子shader 体积雾等也需要取到深度图 以计算深度差等 unity提供了两个内置的纹理 CameraDepthTexture和 CameraDe
  • Unity 使用Photon Server 联网开发(二)游戏同步+房间列表

    photon联机的配置 直接去官网下载Pun的资源包导入项目 设置PhotonServerSettings配置文件 配置appid 通讯协议 服务器地址 端口号 服务器地址可以配置成自己本地服务器 云服务器 直接使用photon服务器 也可
  • Unity 音频卡顿 静帧 等待等问题的解决方案

    是否遇到过在Unity中加载音频文件卡顿 也就是画面卡住 的现象 特别是加载外部音频文件时 虽然时间很短 但这终归不是什么好现象 尤其是打游戏的话 影响很大 但是一些有牌面的Boss也不能不配音乐 当然也可以通过其它方式解决 比如特定条件统
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3

随机推荐

  • MsSQL数据备份与恢复---完全备份与增量备份

    文章目录 1 数据备份 1 1 数据备份的重要性 1 2 数据备份的分类 1 2 1 从物理与逻辑的角度分类 1 2 2 从数据库的备份策略角度分类 1 2 3 备份方式的比较 1 3 常见的备份方法 2 MySQL完全备份与恢复 2 1
  • 扩容 磁盘、pv、lv

    因虚似机上的磁盘空间不够了 试了下偏门的扩展方法 root hdss7 21 df h Filesystem Size Used Avail Use Mounted on devtmpfs 1 9G 0 1 9G 0 dev tmpfs 1
  • Datawhale&Git-Model:假设检验2-多元数值向量的检验

    作业 为研究东 中 西部各省市规模以上的企业发展状况 我们收集了各城市企业的主要经济指标 包括 总资产贡献率 资产负债率 流动资产周转次数 工业成本费用利润率 产品销售率 我们用变量 类别 定义了各类城市 其中1为东部城市 2为中部城市 3
  • openwrt单网口进不了登录界面

    图一 图二 图一是刷完固件后 图二是网线直连电脑的IP配置 进不了登录界面 也ping 不通 请教是什么原因
  • 使用命令恢复postgres数据库报错psql: FATAL: role "root" does not exist 解决方案

    因为是从其他地方备份出来的sql文件 如果直接用pgAdmin4因为格式问题报错input file appears to be a text format dump Please use psql 所以换用命令行执行 但是出现psql F
  • 如何使用vant库的loading组件

    第一步 main js文件引入下载的loading 全局引入ui组件 import Vant from vant import vant lib index css Vue use Vant 第二步 在vuex中定义全局变量loading
  • Java Utils工具类大全

    源码和jar见 https github com evil0ps utils Java Utils 封装了一些常用Java操作方法 便于重复开发利用 另外希望身为Java牛牛的你们一起测试和完善 欢迎入群263641914 一起封装和完成常
  • 鉴权大全(cookie、session、token、jwt、单点登录),深入理解和搞懂鉴权

    先从状态说起吧 众所周知http是无状态的协议 也就是说 HTTP 请求方和响应方间无法维护状态 都是一次性的 它不知道前后的请求都发生了什么 是不是可以单纯的理解为它是一个超级无敌健忘的协议 但有的场景下 我们需要维护状态 最典型的 一个
  • 关于mipi camera 传输速率的计算

    假设图片的分辨率是 1600x1200 帧率按照 30HZ来计算 在理想状态下 未包含 RGB 信号的前后肩宽度 总传输速率为 1600x1200x24x30 1024 1024 1318 4Mbps 如果是单通道传输 则每通道数据传输速率
  • C++:内存管理

    目录 学习目标 1 C C 内存分布 2 C C 动态内存管理 2 1 C动态内存管理 2 2 C 动态内存管理 3 operator new与operator delete函数 4 new和delete的实现原理 5 定位new表达式 学
  • linux fdisk的分区和格式化和挂载相关操作说明

    注意 分区的时候要umount磁盘之后才能分区 在Ubuntu用fdisk分析需要root用户权限 第一步 先把设备卸载掉 解除占用 caizd ubuntu home share lsblk 查看大小空间 caizd ubuntu hom
  • Air780E

    目录 基础资料 探讨重点 参考阅读 实现功能 硬件准备 软件版本 腾讯云物理网平台接入 1 新建项目 2 新建产品 3 添加设备 4 接入方式选择 5 官方密钥认证设备接入指引 6 示例 采用Python实现 HMAC SHA1 算法 结果
  • python读取txt文件(多种方法)

    原始数据 唐诗一百首 txt 方法1 f open 唐诗一百首 txt encoding gbk txt for line in f txt append line strip print txt line strip 去除首尾空格 enc
  • QT中的数据类型转换总结

    一 QString的转换 QString转QByteArray QByteArray byte QString string byte string toLatin1 QString转String QString string std st
  • spring-kafka 会创建多少线程来消费你的topic

    平时工作中 我们对接kafka主要使用的是spring kafka 但是指定的topic到底如何设置线程数 设置的线程数作用范围是什么 详细很多人并不清楚 先上结论 spring kafka是基于group来分配线程数的 在spring k
  • IDEA提示类注释的wrong tag警告的解决办法

    当创建一个类的时候 给类写上注释时 出现类似于 Wrong tag date less Ctrl F1 这种警告 解决方式是 alt enter gt add to custom tags 之后可以看到修改 红色圈位置 以及警告的消失 转载
  • 对 PhD一年级新生有什么建议?

    来源 https www zhihu com question 32210068 answer 624547698 编辑 深度学习与计算机视觉 声明 仅做学术分享 侵删 作者 王晋东不在家 https www zhihu com quest
  • 开启第三方地图(高德)

    public class OpenGDMapUtil param mActivity 上下文 param sLatLng 开始点的坐标 param sPosition 开锁的位置 param ePosition 结束的位置 param eL
  • 常用的16个Java实用工具类,Java开发人员请收藏!

    在Java中 实用程序类是一个定义一组执行常用功能的方法的类 这篇文章展示了最常用的Java实用程序类及其最常用的方法 类列表及其方法列表都按流行度排序 该数据基于GitHub随机选择的50 000个开源Java项目 希望您可以通过浏览列表
  • cocos creator制作微信抖音小游戏《黄金矿工》

    微信小游戏 抖音小游戏 非常适合个人开发者创业 不用版号 门槛低 同时抖音小游戏的系统算法推荐 能让好的游戏脱颖而出 你要做的就是把游戏做好就可以了 这个系列的文章 配套了视频教程讲解与课程资源 课程源码 下面开始讲解黄金矿工的具体制作流程