欢迎光临散文网 会员登陆 & 注册

Cocos Creator个性化时间进度条实现

2021-11-12 19:52 作者:unity小能手  | 我要投稿

在Cocos Creator游戏开发中,经常需要使用个性化时间进度条,下面,我们就一起来封装下自己的个性化时间进度条组件。

一、 个性化时间进度条

1:  编写脚本, 来使用sprite的扇形来显示当前的进度:

属性: time_sec: 定时器的时间

clockwise: 是否为顺时针或逆时针;

reverse:  是否反转

startClockAction: 开始累积时间,看时间过去的百分比,来改变精灵显示的百分比;

stopClockAction: 停止计时累积;

二、 计时器控制组件

const {ccclass, property} = cc._decorator;

@ccclass

export default class ClockCtrl extends cc.Component {

   @property({tooltip:"计时时长"})

   actionTime : number = 10;

   @property({tooltip:"是否逆时针"})

   clockWise : boolean = false;

   @property({tooltip:"计时方向"})

   reverse : boolean = false;  // false,由少变多

   @property({tooltip:"是否在加载的时候就开始计时"})

playOnLoad : boolean = false;

private nowTime : number = 0;   // 用于记录已经过去的时间

private isRuning : boolean = false; // 计时器是否正在行走

private sprite : cc.Sprite;

private endFunc : Function = null;

onLoad () {

this.node.active = false;

// 获取子节点上的Sprite组件

this.sprite = this.node.getChildByName("TimerBar").getComponent(cc.Sprite);

if(this.playOnLoad){

this.startClockAction(this.actionTime, this.endFunc);

       }

}

startClockAction(actionTime : number, endFunc : Function){

if(actionTime <= 0){

return;

       }

this.endFunc = endFunc;

this.node.active = true;

this.actionTime = actionTime;

this.nowTime = 0;

this.isRuning = true;

}

stopClockAction(){

this.node.active = false;

this.isRuning = false;

}

update (dt : number) {

if(!this.isRuning){

return;

       }

this.nowTime += dt;

// 将时间转换为百分比,设置给this.sprite的FillRange属性

let per : number = this.nowTime/this.actionTime;

if(per > 1){

           per = 1;

this.isRuning = false;

if(this.endFunc){

this.endFunc();

           }

       }

// 进度条 由多变少的控制

// per : 0  0.5 1

// 1-per:1  0.5 0

if(this.reverse){

           per = 1 - per;

       }

// 顺时针和逆时针的控制

if(this.clockWise){

           per = -per;

       }

this.sprite.fillRange = per;

   }

}

三、 UI组件

四、 组件的使用测试GameMgr.ts

import ClockCtrl from "./ClockCtrl";

const {ccclass, property} = cc._decorator;

@ccclass

export default class GameMgr extends cc.Component {    

   @property({type:ClockCtrl, tooltip:"计时器组件"})

   clock : ClockCtrl = null;

   @property({tooltip:"计时器计时时长"})

   actionTime : number = 5;

private endFunc(){

console.log(this.actionTime,"秒倒计时完成!");

   }

start(){

this.clock.startClockAction(this.actionTime, this.endFunc);

}

}


Cocos Creator个性化时间进度条实现的评论 (共 条)

分享到微博请遵守国家法律