zoukankan      html  css  js  c++  java
  • Cocos Creator 橡皮差(刮刮卡)功能(转)

    实现一个刮刮卡的效果,于是在论坛里搜集了一些资料并且看了一下CCMask的源码,做出来一套可用的教程,分享给大家。(WEBGL和Native端测试可用)

    maskNode是详细设置如下

    我们在 scratchCardCtr上挂载了一个脚本 scratchCardNodeCtrl 

    直接上这个脚本的代码吧

    cc.Class({
        extends: cc.Component,
    
        properties: {
            rsultLabel:cc.Label,
            mask:cc.Mask,
            promptLabel:cc.Label,
        },
    
        // use this for initialization
        onLoad: function (){
            this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegin, this);
            this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this);
            this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnd, this);
            this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this);
        },
    
        onDestroy:function () {
            this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegin, this);
            this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this);
            this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnd, this);
            this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this);
        },
    
        start:function () {
           //
    
    
            // var x =-100;
            // var y =-100;
            // var width =300;
            // var height = 200;
            // var rectangle = [cc.v2(x, y),
            //     cc.v2(x + width, y),
            //     cc.v2(x + width, y + height),
            //     cc.v2(x, y + height)];
            //
            // stencil.drawPoly(rectangle, color, 0, color);
    
            // stencil.drawPoly(this.mask._calculateCircle(cc.p(0,0),cc.p(100,100), 64), color, 0, color);
            //
            // stencil.drawPoly(this.mask._calculateCircle(cc.p(200,200),cc.p(50,50), 64), color, 0, color);
    
        },
    
        _onTouchBegin:function (event) {
    
            cc.log('touchBegin');
    
            var point = event.touch.getLocation();
            point = this.node.convertToNodeSpaceAR(point);
            this._addCircle(point);
        },
    
        _onTouchMoved:function (event) {
            var point = event.touch.getLocation();
            point = this.node.convertToNodeSpaceAR(point);
            this._addCircle(point);
        },
    
        _onTouchEnd:function (event) {
            var point = event.touch.getLocation();
            point = this.node.convertToNodeSpaceAR(point);
            this._addCircle(point);
        },
    
        _onTouchCancel:function (event) {
            // var point = event.touch.getLocation();
            // point = this.node.convertToNodeSpaceAR(point);
            // this._addCircle(point);
        },
    
        _addCircle:function (point) {
            var stencil = this.mask._clippingStencil;
            var color = cc.color(255, 255, 255, 0);
            stencil.drawPoly(this.mask._calculateCircle(point,cc.p(50,50), 64), color, 0, color);
            if (!CC_JSB) {
                cc.renderer.childrenOrderDirty = true;
            }
        },
    
    
        // called every frame, uncomment this function to activate update callback
        // update: function (dt) {
    
        // },
    });
    

      

  • 相关阅读:
    JavaWeb学习记录(三)——网页中文编码问题
    JavaScript个人学习记录总结(二)——验证表单输入之模式匹配
    JavaWeb学习记录(四)——日期和数字的格式转换
    JavaWeb学习记录(五)——Servlet随机产生验证码
    JavaWeb学习记录(二)——防盗链技术
    mysql之数据库连接的方法封装及防sql注入
    JavaWeb学习记录(六)——用户登录功能之Session与验证码验证功能的实现
    String中两种对象实例化方法的区别
    [java多线程]数字加减 代码
    java多线程的应用 生产者消费者问题代码
  • 原文地址:https://www.cnblogs.com/luorende/p/9214163.html
Copyright © 2011-2022 走看看