廢話不多說,先上代碼:
const {ccclass, property} = cc._decorator;
@ccclass
export default class Countdown extends cc.Component {
@property(cc.Animation)
animation: cc.Animation = null;
@property(cc.Label)
labelComponent: cc.Label = null;
count: number = 0;
callback: Function = null;
// LIFE-CYCLE CALLBACKS:
onLoad () {}
start () {}
showTime (time: number) {
this.count = time;
this.animation.play();
this.callback = function () {
if (this.count <= 0) {
this.labelComponent.unschedule(this.callback);
return;
}
this.count--;
**this.labelComponent.string = this.count.toString();** // 訪問組件需綁定響應(yīng)函數(shù)調(diào)用者為this
}.bind(this)
this.labelComponent.schedule(this.callback, 1);
this.labelComponent.string = this.count.toString();
}
// update (dt) {}
}
問題出在這句:this.labelComponent.string = this.count.toString(); ,如果想在this.callback 中設(shè)置 this.labelComponent.string,正確的用法是 this.callback = funtion () {}.bind(this),否則會報這樣的錯誤:Uncaught TypeError: Cannot set property 'string' of undefined
creator官方文檔-計時器的使用
creator官方文檔-bind綁定響應(yīng)函數(shù)的調(diào)用者