zoukankan      html  css  js  c++  java
  • cocos creator基础-(十八)高级UI的实现

    1: 完成弹出式对话框;
    2: 完成个性化时间进度条;
    弹出式对话框
    1:对话框的结构:
      根节点 -->
            mask: 全屏的单色精灵,监听事件,关闭对话框;  
            dlg 与它的孩子: 对话框的内容,监听事件,挡住不让他传递到mask节点上;      
            弹出式动画:
              mask: 渐变进来;
              对话框内容缩放,并加上easing缓动对象;
            收起式动画:
              mask: 渐变出去;
              对话框内容缩小,并加上easing 缓动对象;
    2: 对话框组件脚本
      (1)show_dlg
      (2)hide_dlg
      
     1 // popup_dlg.js
     2 cc.Class({
     3     extends: cc.Component,
     4 
     5     properties: {
     6         // foo: {
     7         //    default: null,      // The default value will be used only when the component attaching
     8         //                           to a node for the first time
     9         //    url: cc.Texture2D,  // optional, default is typeof default
    10         //    serializable: true, // optional, default is true
    11         //    visible: true,      // optional, default is true
    12         //    displayName: 'Foo', // optional
    13         //    readonly: false,    // optional, default is false
    14         // },
    15         // ...
    16         mask: {
    17             type: cc.Node,
    18             default: null,
    19         },
    20 
    21         mask_opacity: 128,
    22 
    23         content: {
    24             type: cc.Node,
    25             default: null,
    26         },
    27 
    28     },
    29 
    30     // use this for initialization
    31     onLoad: function () {
    32         
    33     },
    34 
    35     show_dlg: function() {
    36         this.node.active = true;
    37         // mask 渐变出来;
    38         this.mask.opacity = 0;
    39         var fin = cc.fadeTo(0.3, this.mask_opacity);
    40         this.mask.runAction(fin);
    41         // dlg由小到大
    42 
    43         this.content.scale = 0;
    44         var s = cc.scaleTo(0.4, 1).easing(cc.easeBackOut());
    45         this.content.runAction(s);
    46     },
    47 
    48     hide_dlg: function() {
    49         // 
    50         var fout = cc.fadeOut(0.3);
    51         this.mask.runAction(fout);
    52 
    53         var s = cc.scaleTo(0.3, 0).easing(cc.easeBackIn());
    54         var end_func = cc.callFunc(function() {
    55             this.node.active = false;
    56         }.bind(this));
    57 
    58         var seq = cc.sequence([s, end_func]);
    59         this.content.runAction(seq);
    60     },
    61     // called every frame, uncomment this function to activate update callback
    62     // update: function (dt) {
    63 
    64     // },
    65 });
    // game_scene.js
    var popup_dlg = require("piopup_dlg");
    cc.Class({
        extends: cc.Component,
    
        properties: {
            // foo: {
            //     // ATTRIBUTES:
            //     default: null,        // The default value will be used only when the component attaching
            //                           // to a node for the first time
            //     type: cc.SpriteFrame, // optional, default is typeof default
            //     serializable: true,   // optional, default is true
            // },
            // bar: {
            //     get () {
            //         return this._bar;
            //     },
            //     set (value) {
            //         this._bar = value;
            //     }
            // },
            dlg : {
                type : popup_dlg,
                default : null
            },
        },
    
        // LIFE-CYCLE CALLBACKS:
    
        // onLoad () {},
    
        start () {
    
        },
        on_show_dlg_click: function(){
            this.dlg.showDlg();
        },
        // update (dt) {},
    });
    个性化时间进度条
    1: 编写脚本, 来使用sprite的扇形来显示当前的进度:
      属性:
        time_sec: 定时器的时间
        clockwise: 是否为顺时针或逆时针;
        reverse: 是否反转
      start_clock_action: 开始累积时间,看时间过去的百分比,来改变精灵显示的百分比;
      stop_clock_action: 停止计时累积;
      
    // timebar.js
    cc.Class({
        extends: cc.Component,
    
        properties: {
            // foo: {
            //    default: null,      // The default value will be used only when the component attaching
            //                           to a node for the first time
            //    url: cc.Texture2D,  // optional, default is typeof default
            //    serializable: true, // optional, default is true
            //    visible: true,      // optional, default is true
            //    displayName: 'Foo', // optional
            //    readonly: false,    // optional, default is false
            // },
            // ...
    
            action_time: 15,
            clockwise: false, // 是否为顺时针
            reverse: false, // false, 由少变多,否者的话的就是由多变少;
    
            play_onload: true, // 是否在加载的时候开始倒计时
        },
    
        // use this for initialization
        onLoad: function () {
            this.now_time = 0;
            this.is_running = false;
            this.node.active = false; 
    
            this.sprite = this.getComponent(cc.Sprite);
            if (this.play_onload) {
                this.start_clock_action(this.action_time);
            }    
        },
    
    
        start_clock_action: function(action_time, end_func) {
            if (action_time <= 0) {
                return;
            }
    
            this.end_func = end_func;
    
            this.node.active = true;
            this.action_time = action_time;
            this.now_time = 0;
            
            this.is_running = true;
        },
    
        stop_clock_action: function() {
            this.node.active = false;
            this.is_running = false;
        },
        
        // called every frame, uncomment this function to activate update callback
        update: function (dt) {
            if (!this.is_running) {
                return;
            }
    
            this.now_time += dt;
            var per = this.now_time / this.action_time;
            if (per > 1) { // 结束了,超时了
                per = 1;
                this.is_running = false;
                if (this.end_func) {
                    this.end_func();
                }
                
            }
            
            if (this.reverse) {
                per = 1 - per;
            }
    
            if (this.clockwise) {
                per = -per;
            }
            this.sprite.fillRange = per;
        },
    });
  • 相关阅读:
    poj 2584 T-Shirt Gumbo (二分匹配)
    hdu 1757 A Simple Math Problem (乘法矩阵)
    矩阵之矩阵乘法(转载)
    poj 2239 Selecting Courses (二分匹配)
    hdu 3661 Assignments (贪心)
    hdu 1348 Wall (凸包)
    poj 2060 Taxi Cab Scheme (二分匹配)
    hdu 2202 最大三角形 (凸包)
    hdu 1577 WisKey的眼神 (数学几何)
    poj 1719 Shooting Contest (二分匹配)
  • 原文地址:https://www.cnblogs.com/orxx/p/10493140.html
Copyright © 2011-2022 走看看