大家好,我想实现的功能是弹出一个对话框,对话框中的文字是一个一个显示出来的。
如果玩家在文字没有显示完的时候点击了屏幕,那么就直接显示全部字母,然后等待玩家的下一次 点击,玩家再次点击的时候隐藏界面。如果玩家在文字显示完了以后再点击屏幕就直接隐藏界面。
现在遇到的问题是this.unschedule函数不能停止我之前开启的计时器函数,现在点击以后会出现所有的lable然后还会一个一个的出现文字。但是如果我用this.unscheduleAllCallbacks()这个方法就能实现功能,因为有可能会加一些其他的计时器,所以我不想用unscheduleAllCallbacks()这个 方法,源码如下:
//显示lable界面
_displayLable(lableString){
this.FailLable.opacity=255;
this.FailLable.children[1].setPosition(0,-this._height/2+160);
this.FailLable.children[1].getComponent(cc.Label).string="";
this.schedule(this._failLableSchedule.bind(this,lableString),0.06,lableString.length-1);
this.FailLable.once(cc.Node.EventType.TOUCH_END,this._displayAllLable.bind(this,lableString),this);
},
//显示全部lable
_displayAllLable(lab){
//如果点击的时候lable没有显示完,就关闭计时器,直接让lable显示完
if(this.FailLable.children[1].getComponent(cc.Label).string.length!==lab.length){
//this.unscheduleAllCallbacks();
//停止计时器没用
this.unschedule(this._failLableSchedule);
this.FailLable.children[1].getComponent(cc.Label).string=lab;
this.FailLable.once(cc.Node.EventType.TOUCH_END,this._hideLable,this);
}
//如果lable显示完了就直接隐藏界面
else{
this._hideLable();
}
},
//隐藏界面
_hideLable(){
this.FailLable.opacity=0;
this._LableNum=0;
},
//计时器函数
_failLableSchedule(lab){
this.FailLable.children[1].getComponent(cc.Label).string+=lab[this._LableNum];
this._LableNum++;
},