首页 > 其他分享 >【组件】刮刮卡 (论坛水友分享的)

【组件】刮刮卡 (论坛水友分享的)

时间:2022-09-27 18:26:01浏览次数:72  
标签:Node cc mask cover 刮刮卡 水友 graphics 组件 Mask

版本:2.4.10

参考:Cocos论坛-刮刮卡实现

 

一 显示效果

 

二 实现原理

实现是利用一张纯灰色cover图片盖在谢谢惠顾图片上方,将图片cover放在cc.Mask节点下。

将cc.Mask设置为反向遮罩,并设置高宽为0,并使用Mask的cc.Graphcis进行线段绘制,这样有线段的地方灰色图片cover就会透明,露出下方的"谢谢惠顾"。

 

三 刮刮卡实现

创建空节点cc.Node,从右边属性面板选择添加组件-渲染组件-Mask。(直接在cc.Node上右键创建节点-渲染组件-是没有Mask的)

 

 

设置mask高宽为0,勾选反向遮罩Inverted,遮罩方式Type选择RECT。

 

 

 找一张纯灰色图片

 

 

将图片放在cover节点下

 

 

因为反向遮罩是遮挡的地方才会变透明,当mask高宽为0时啥也没遮挡,这时cover图片是可以全部看见的。

 

 

尝试把mask高宽修改成50x50,可以看到会透明了一个50x50的矩形。(实际运行时记得把mask高宽改回成0)

 

 

把谢谢惠顾图片放在cover图片下

 

 

 

 

 

完整代码:

/**
 * 刮刮卡
 * @author chenkai 2022.9.27
 */
@ccclass
export default class MainScene extends cc.Component {

    @property({ type: cc.Mask, tooltip: "遮罩" })
    mask: cc.Mask = null;
    @property({ type: cc.Node, tooltip: "纯灰色图片" })
    cover: cc.Node = null;

    public onl oad() {
        //设置线段
        let graphics: cc.Graphics = (this.mask as any)._graphics;
        graphics.lineWidth = 20;
        graphics.lineCap = cc.Graphics.LineCap.ROUND;
        graphics.lineJoin = cc.Graphics.LineJoin.ROUND;
        graphics.strokeColor = cc.color(255, 255, 255, 255);

        //触摸事件
        this.cover.on(cc.Node.EventType.TOUCH_START, this.onTouchStart, this);
        this.cover.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMove, this);
    }

    /**触摸开始 */
    private onTouchStart(e: cc.Event.EventTouch) {
        //记录触摸起始点,将触摸点世界坐标转成cover本地坐标
        let pos = this.cover.convertToNodeSpaceAR(e.getLocation());
        //将画线起点移动到触摸起始点
        let graphics: cc.Graphics = (this.mask as any)._graphics;
        graphics.moveTo(pos.x, pos.y);
    }

    /**触摸移动 */
    private onTouchMove(e: cc.Event.EventTouch) {
        //将触摸点世界坐标转成cover本地坐标
        let pos = this.cover.convertToNodeSpaceAR(e.getLocation());
        //画线
        let graphics: cc.Graphics = (this.mask as any)._graphics;
        graphics.lineTo(pos.x, pos.y);
        graphics.stroke();
    }
}

  

 

 

 

搜索

复制

标签:Node,cc,mask,cover,刮刮卡,水友,graphics,组件,Mask
From: https://www.cnblogs.com/gamedaybyday/p/16735479.html

相关文章

  • element ui 二次封装上传附件的组件
    因为elementui上传组件的代码很长,在项目中关于上传的代码过于冗余,因此我二次封装了一个上传附件的组件:项目中使用:1<!--附件-->2   <el-form-item......
  • iview中时间选择器组件改变日期格式
    //改变视图的显示格式,但不会改变value的值的格式format="yyyy-MM-dd"//改变value值的格式@on-change="anZhuangDate=$event" ......
  • React 组件的生命周期
    生命周期(旧)组件的生命周期可分成三个状态:Mounting(挂载):已插入真实DOMUpdating(更新):正在被重新渲染Unmounting(卸载):已移出真实DOM挂载阶段:ReactDOM.render()......
  • Vue+Echarts--父组件+子组件(基础)
    基本的思路就是:在父组件获取后端数据,然后传到子组件,子组件创建图表进行展示。1、获取后端数据 2、将数据传给子组件,并将子组件引入到父组件  3、子组件接收数......
  • 关于 Web 组件的 5 个问题
    关于Web组件的5个问题在本文中,我们将尝试回答以下与Web组件相关的问题:什么是网络组件?webcomponents的一些基本原理是什么?webcomponents有哪些应用?webcompone......
  • 界面组件DevExpress WinForms v22.1 - 全新升级的HTML CSS 模板
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office......
  • cesium基础组件的显示与隐藏
    方法一/*通过css控制组件显隐及位置*/.cesium-viewer-toolbar,/*右上角按钮*/.cesium-viewer-animationContainer,/*左下角动画控件*/.......
  • vue学习笔记(六):EL组件库学习
    安装Element-uinpmielement-ui在main.js中插入引用项importElementfrom'element-ui'import'element-ui/lib/theme-chalk/index.css'在newVue之前插入引用......
  • WPF 由于系统颜色配置 Mscms 组件损坏启动失败
    本文记录WPF应用程序,因为系统的颜色配置Mscms.dll组件损坏导致应用加载图片失败,从而启动失败的原因和解决方法在WPF应用加载图片时,将会调用到系统的Mscms.dll组件......
  • APIView的基本使用与序列化组件
    APIView的基本使用1.drf是一个第三方app,只能在django中使用2.安装drf后,导入视图类APOIView,所有后期要使用drf写视图类,都是继承AOIView及其子类3.在app注册中注册rest_......