【100个Cocos实例】完蛋!你看我在刮刮乐中刮到了什么?

引言

什么?还能刮出这个?

相信大家对刮刮乐 都不陌生,昨天 听到小伙伴说花了20 买了张刮刮乐,结果刮中了20白忙活一场

假如我们要在Cocos游戏开发 中实现刮刮乐效果,应该怎么做呢?

本文将介绍一下如何实现能刮出美女的刮刮乐效果。

本文源工程可在文末获取,小伙伴们自行前往。

1.实现原理

想要实现刮刮乐 的效果,我们需要借助Mask遮罩组件和Graphics自定义图形组件。

1.遮罩组件

Mask组件是一个用于实现遮罩效果的关键组件。

通过使用Mask,你可以在游戏中创建各种形状 的遮罩,用于显示或隐藏特定区域 的内容,常用于实现圆形的头像

2.自定义图形组件

Graphics组件是一个用于绘制2D图形和路径 的强大工具,可通过代码动态创建形状、线条和填充 ,为游戏界面和特效 提供灵活的绘图功能

笔者在写文章和教程 的时候就最喜欢用Graphics组件,因为它真的好用

2.资源准备

既然想要 在刮刮乐中刮出美女 ,那么我们就要准备一张美女图 ,和一张盖在美女上面的遮罩图 ,所以,这次就委屈Cocos您了。

将图片放进去Creator ,然后简单编辑一下UI。层级结构如下:

Mask节点添加Mask组件,并且勾选Inverted反向遮罩。添加Mask组件,系统会自动帮忙添加一个Graphics组件:

3.编写代码

首先 创建一个ScratchTicket组件,包含对Mask组件的引用、Graphics组件的引用和isScratching变量用于判断是否正在刮刮刮乐。

typescript 复制代码
import { _decorator, Component, Graphics, Mask, Node, UITransform, v3 } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('ScratchTicket')
export class ScratchTicket extends Component {
    @property({ type: Mask })
    mask: Mask = null;

    graphics: Graphics;

    private isScratching: boolean = false;
}

start方法中获取Graphics组件以及添加鼠标事件的监听。

typescript 复制代码
start() {
    this.graphics = this.mask.getComponent(Graphics);
    this.node.on(Node.EventType.TOUCH_START, this.onTouchStart, this);
    this.node.on(Node.EventType.TOUCH_MOVE, this.onTouchMove, this);
    this.node.on(Node.EventType.TOUCH_END, this.onTouchEnd, this);
}

onTouchStartonTouchEnd方法主要处理isScratching的状态。

typescript 复制代码
onTouchStart(event) {
    this.isScratching = true;
}

onTouchEnd(event) {
    this.isScratching = false;
}

onTouchMove中主要实现刮刮乐的核心逻辑:

  • 通过event.getLocation()获取鼠标位置。
  • 通过convertToNodeSpaceAR实现坐标转换。
  • 通过circle方法画圆。
  • 通过fill进行填充。
typescript 复制代码
onTouchMove(event) {
    if (!this.isScratching) return;
    const pos = this.node.getComponent(UITransform).convertToNodeSpaceAR(v3(event.getLocation().x, event.getLocation().y, 0));
    this.graphics.circle(pos.x, pos.y, 30);
    this.graphics.fill();
}

由于Mask组件的反向遮罩 效果,画圆的地方会有"擦玻璃"的效果:

4.效果演示

结语

近日,笔者受麒麟子 (深耕游戏引擎与游戏开发15年 ,每一滴干货都源自商业项目 实践)的邀请,以嘉宾 的形式加入知识星球,星球主要用于:

  • 导师教学
  • 学习问题交流
  • 新人入门与进阶
  • 招聘与就业机会分享
  • 面试题集锦
  • 面试经验分享

总的来说,星球的目标 只有一个:提供优质内容,搞学习 。感兴趣的小伙伴可以私信"知识星球"了解和捧场。

我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。

AD:笔者线上的小游戏《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》大家可以自行点击搜索体验。

实不相瞒,想要个在看 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!

推荐专栏:

你知道王者荣耀是怎么实现技能范围指示器的吗?

8年主程手把手打造Cocos独立游戏开发框架

和8年游戏主程一起学习设计模式

从零开始开发贪吃蛇小游戏到上线系列

本文源工程 可通过私信发送ScratchTicket获取。

相关推荐
辻戋1 小时前
从零实现React Scheduler调度器
前端·react.js·前端框架
徐同保1 小时前
使用yarn@4.6.0装包,项目是react+vite搭建的,项目无法启动,报错:
前端·react.js·前端框架
Qrun2 小时前
Windows11安装nvm管理node多版本
前端·vscode·react.js·ajax·npm·html5
中国lanwp2 小时前
全局 npm config 与多环境配置
前端·npm·node.js
JELEE.3 小时前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
TeleostNaCl5 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
前端大卫6 小时前
为什么 React 中的 key 不能用索引?
前端
你的人类朋友6 小时前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
小李小李不讲道理8 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻8 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js