You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
6.4 KiB
218 lines
6.4 KiB
import Common5 from "../../Platform/th/Common5";
|
|
|
|
|
|
const { ccclass, property } = cc._decorator;
|
|
|
|
@ccclass
|
|
export default class DaoJiShiRoll extends cc.Component {
|
|
@property({
|
|
type: cc.Node,
|
|
displayName: "十位分",
|
|
})
|
|
minute_ten: cc.Node = null;
|
|
|
|
@property({
|
|
type: cc.Node,
|
|
displayName: "个位分",
|
|
})
|
|
minute_one: cc.Node = null;
|
|
|
|
@property({
|
|
type: cc.Node,
|
|
displayName: "十位秒",
|
|
})
|
|
second_ten: cc.Node = null;
|
|
|
|
@property({
|
|
type: cc.Node,
|
|
displayName: "个位秒",
|
|
})
|
|
second_one: cc.Node = null;
|
|
|
|
@property({
|
|
type: cc.Node,
|
|
displayName: "十位毫秒",
|
|
})
|
|
millisecond_ten: cc.Node = null;
|
|
|
|
@property({
|
|
type: cc.Node,
|
|
displayName: "个位毫秒",
|
|
})
|
|
millisecond_one: cc.Node = null;
|
|
|
|
@property({
|
|
displayName: "艺术字高度",
|
|
})
|
|
wordHeight: number = 70;
|
|
|
|
@property({
|
|
displayName: "总时间s",
|
|
})
|
|
allTimeNum: number = 60;
|
|
|
|
@property({
|
|
displayName: "是否为滚动计时器",
|
|
})
|
|
isRollTimer: boolean = false;
|
|
|
|
@property({
|
|
type: cc.AudioSource,
|
|
displayName: "倒计时音效",
|
|
})
|
|
timePasses: cc.AudioSource = null;
|
|
|
|
isStartTimer: boolean = false //是否开始倒计时
|
|
finishCallFunc = null //结束回调
|
|
callTarget = null //回调对象
|
|
curTimeNum: number = 0; //当前时间
|
|
|
|
start() {
|
|
if (!this.allTimeNum) {
|
|
this.allTimeNum = 60;
|
|
}
|
|
this.setRollTime(this.allTimeNum);
|
|
}
|
|
|
|
update(dt) {
|
|
if (this.isStartTimer && this.curTimeNum > 0) {
|
|
this.curTimeNum -= dt;
|
|
if (this.curTimeNum <= 0) {
|
|
this.curTimeNum = 0;
|
|
this.isStartTimer = false;
|
|
this.millisecond_ten.y = 0.5 * this.wordHeight;
|
|
this.millisecond_one.y = 0.5 * this.wordHeight;
|
|
this.timePasses.stop();
|
|
this.finishCallFunc && (this.callTarget ? this.finishCallFunc.apply(this.callTarget) : this.finishCallFunc());
|
|
return;
|
|
}
|
|
if (this.isRollTimer) {
|
|
this.updateRollTime(dt);
|
|
} else {
|
|
this.updateShowTime(this.curTimeNum);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
//设置开始/结束倒计时
|
|
setIsStartTimer(bStart: boolean, finishCallFunc?: { target: any, callFunc: any }) {
|
|
this.isStartTimer = bStart;
|
|
if (finishCallFunc) {
|
|
this.finishCallFunc = finishCallFunc.callFunc;
|
|
this.callTarget = finishCallFunc.target;
|
|
}
|
|
if (bStart) {
|
|
this.timePasses.play();
|
|
} else {
|
|
this.timePasses.stop();
|
|
}
|
|
}
|
|
|
|
//设置滚动时间
|
|
setRollTime(second: number) {
|
|
if (second >= 3600) {
|
|
second = 3599
|
|
}
|
|
this.curTimeNum = second;
|
|
|
|
let num = Math.trunc(second / 600);
|
|
this.minute_ten.y = (num + 0.5) * this.wordHeight;
|
|
|
|
second = second % 600;
|
|
num = Math.trunc(second / 60);
|
|
this.minute_one.y = (num + 0.5) * this.wordHeight;
|
|
|
|
second = second % 60;
|
|
num = Math.trunc(second / 10);
|
|
this.second_ten.y = (num + 0.5) * this.wordHeight;
|
|
|
|
second = second % 10;
|
|
num = Math.trunc(second);
|
|
this.second_one.y = (num + 0.5) * this.wordHeight;
|
|
|
|
this.millisecond_ten.y = 0.5 * this.wordHeight;
|
|
this.millisecond_one.y = 0.5 * this.wordHeight;
|
|
}
|
|
|
|
//设置滚动时间
|
|
private updateShowTime(second: number) {
|
|
if (second >= 3600) {
|
|
second = 3599
|
|
}
|
|
this.curTimeNum = second;
|
|
|
|
let num = Math.trunc(second / 600);
|
|
this.minute_ten.y = (num + 0.5) * this.wordHeight;
|
|
|
|
second = second % 600;
|
|
num = Math.trunc(second / 60);
|
|
this.minute_one.y = (num + 0.5) * this.wordHeight;
|
|
|
|
second = second % 60;
|
|
num = Math.trunc(second / 10);
|
|
this.second_ten.y = (num + 0.5) * this.wordHeight;
|
|
|
|
second = second % 10;
|
|
num = Math.trunc(second);
|
|
this.second_one.y = (num + 0.5) * this.wordHeight;
|
|
|
|
second = second * 100 % 100;
|
|
num = Math.trunc(second / 10);
|
|
this.millisecond_ten.y = (num + 0.5) * this.wordHeight;
|
|
|
|
second = second % 10;
|
|
num = Math.trunc(second);
|
|
this.millisecond_one.y = (num + 0.5) * this.wordHeight;
|
|
}
|
|
|
|
//更新时间帧滚动
|
|
private updateRollTime(dt: number) {
|
|
|
|
this.millisecond_one.y -= dt * this.wordHeight * 100;
|
|
if (this.millisecond_one.y < this.wordHeight / 2) {
|
|
let dValue = (this.wordHeight / 2 - this.millisecond_one.y) % (10 * this.wordHeight);
|
|
this.millisecond_one.y = 10.5 * this.wordHeight - dValue;
|
|
}
|
|
|
|
this.millisecond_ten.y -= dt * this.wordHeight * 10;
|
|
if (this.millisecond_ten.y >= this.wordHeight / 2) {
|
|
return;
|
|
}
|
|
let dValue = (this.wordHeight / 2 - this.millisecond_ten.y);
|
|
this.millisecond_ten.y = 10.5 * this.wordHeight - dValue;
|
|
|
|
this.updateRollTime_second();
|
|
}
|
|
|
|
//更新秒级时间滚动
|
|
private updateRollTime_second() {
|
|
if (this.second_one.y > this.wordHeight / 2) {
|
|
cc.tween(this.second_one).to(0.3, { y: this.second_one.y - this.wordHeight }).start();
|
|
return;
|
|
}
|
|
this.second_one.y = 10.5 * this.wordHeight;
|
|
cc.tween(this.second_one).to(0.3, { y: this.second_one.y - this.wordHeight }).start();
|
|
|
|
if (this.second_ten.y > this.wordHeight / 2) {
|
|
cc.tween(this.second_ten).to(0.3, { y: this.second_ten.y - this.wordHeight }).start();
|
|
return;
|
|
}
|
|
this.second_ten.y = 6.5 * this.wordHeight;
|
|
cc.tween(this.second_ten).to(0.3, { y: this.second_ten.y - this.wordHeight }).start();
|
|
|
|
if (this.minute_one.y > this.wordHeight / 2) {
|
|
cc.tween(this.minute_one).to(0.3, { y: this.minute_one.y - this.wordHeight }).start();
|
|
return;
|
|
}
|
|
this.minute_one.y = 10.5 * this.wordHeight;
|
|
cc.tween(this.minute_one).to(0.3, { y: this.minute_one.y - this.wordHeight }).start();
|
|
|
|
if (this.minute_ten.y > this.wordHeight / 2) {
|
|
cc.tween(this.minute_ten).to(0.3, { y: this.minute_ten.y - this.wordHeight }).start();
|
|
return;
|
|
}
|
|
this.minute_ten.y = 6.5 * this.wordHeight;
|
|
cc.tween(this.minute_ten).to(0.3, { y: this.minute_ten.y - this.wordHeight }).start();
|
|
}
|
|
}
|
|
|