发新话题
打印

[讨论] 请教个问题,算是关于算法的吧

请教个问题,算是关于算法的吧

我现在做一个计时器,有按钮可以暂停,到达某一时间时发出声音提示并且显示时间的数字改变颜色。计时是通过setInterval实现的。
现在有个问题就是,现在我用的方法是if(Num==30){ring.start();},可是这样一来,一旦在正好等于30的时候暂停提示音就会每隔一秒播一次,而我是想让它只执行一次。也想过再定义一个变量,执行一次之后就改变,破坏原有的条件,可是总觉得这样太麻烦了。小弟刚学AS,不知道有没有什么好的方法可以实现这个效果,比如说条件变为经过某个值的时候执行之类的……

TOP

不太清楚你具体怎么做的,最好把代码发上来

TOP

回复 2# 的帖子

var totalNum:Number;
var timeB:Boolean = true;
var playif:Boolean = false;
var ring:Sound = new Sound();
var alarm:Sound = new Sound();
alarm.attachSound("alarm");
ring.attachSound("ring");
this.reset_btn.gotoAndStop("stopper");
this.ctrl_btn.onPress = function() {
        if (playif == true) {
                pausing();
        } else {
                timing();
        }
};
function timing() {
        ctrl_btn.gotoAndStop("pause");
        playif = true;
        var Num:Number = totalNum;
        function time_func() {
                time_txt.textColor = 000000;
                if (timeB == true) {
                        var fen:String = "0"+int(Num/60)+":";
                        if (Num%60<10) {
                                var miao:String = "0"+Num%60;
                        } else {
                                var miao:String = Num%60+"";
                        }
                        time_txt.text = "剩余时间:"+fen+miao;
                        Num--;
                }
                if (Num == 29) {
                        ring.start();
                }
                if (Num<30) {
                        time_txt.textColor = 0xFF3300;
                }
                if (Num<0) {
                        timeB = true;
                        playif = false;
                        time_txt.text = "时间到";
                        clearInterval(ID);
                        alarm.start();
                }
        }
        time_func();
        ID = setInterval(time_func, 1000);
}
function pausing() {
        if (timeB == true) {
                timeB = false;
                ctrl_btn.gotoAndStop("start");
        } else {
                timeB = true;
                ctrl_btn.gotoAndStop("pause");
        }
}
this.reset_btn.onPress = function() {
        reseting();
};
function reseting() {
        clearInterval(ID);
        Num = totalNum;
        timeB = true;
        playif = false;
        ctrl_btn.gotoAndStop("start");
        time_txt.textColor = 0;
        time_txt.text = "计时停止";
}

这位仁兄,代码的话就都在这了,参考一下我前面说的应该有看出问题吧。

TOP

发现了好几个ID可是都是局部变量

TOP

//var ID:Number ;
var totalNum:Number=33;
var Num:Number = totalNum;
var timeB:Boolean = true;
var playif:Boolean = false;
var ring:Sound = new Sound();
var alarm:Sound = new Sound();
alarm.attachSound("alarm");
ring.attachSound("ring");
this.reset_btn.gotoAndStop("stopper");
this.ctrl_btn.onPress = function() {
        if (playif == true) {
                pausing();
        } else {
                timing();
        }
};
function timing() {
        ctrl_btn.gotoAndStop("pause");
        playif = true;
      
        
       // time_func();
        ID = setInterval(time_func, 1000);
}
function pausing() {
        if (timeB == true) {
                timeB = false;
                ctrl_btn.gotoAndStop("start");
                                clearInterval(ID);
        } else {
                timeB = true;
                ctrl_btn.gotoAndStop("pause");
                               
                                ID = setInterval(time_func, 1000);
        }
}
this.reset_btn.onPress = function() {
        reseting();
};
function reseting() {
        clearInterval(ID);
        Num = totalNum;
        timeB = true;
        playif = false;
        ctrl_btn.gotoAndStop("start");
        time_txt.textColor = 0;
        time_txt.text = "计时停止";
}
function time_func() {
                        trace(Num);
                time_txt.textColor = 0x000000;
                if (timeB == true) {
                        var fen:String = "0"+int(Num/60)+":";
                        if (Num%60<10) {
                                var miao:String = "0"+Num%60;
                        } else {
                                var miao:String = Num%60+"";
                        }
                        time_txt.text = "剩余时间:"+fen+miao;
                        Num--;
                }
                if (Num == 29) {
                        ring.start();
                }
                if (Num<30) {
                        time_txt.textColor = 0xFF3300;
                }
                if (Num<0) {
                        timeB = true;
                        playif = false;
                        time_txt.text = "时间到";
                        clearInterval(ID);
                        alarm.start();
                }
        }

TOP

谢谢各位,问题已经解决了。还是通过新定义一个变量来解决的问题,不过对变量的控制放在了timing和pausing函数中,这样也不算很繁杂吧。

发一下改后的代码,顺便说一下,控制totalNum的代码是放在父一层的时间轴中的,这样实现多次调用而总时间不同。

var totalNum:Number;
var timeB:Boolean = true;
var playif:Boolean = false;
var ringif:Boolean = true;
var ring:Sound = new Sound();
var alarm:Sound = new Sound();
alarm.attachSound("alarm");
ring.attachSound("ring");
this.reset_btn.gotoAndStop("stopper");
this.ctrl_btn.onPress = function() {
        if (playif == true) {
                pausing();
        } else {
                timing();
        }
};
function timing() {
        ctrl_btn.gotoAndStop("pause");
        playif = true;
        ringif = true;
        var Num:Number = totalNum;
        function time_func() {
                time_txt.textColor = 000000;
                if (timeB == true) {
                        var fen:String = "0"+int(Num/60)+":";
                        if (Num%60<10) {
                                var miao:String = "0"+Num%60;
                        } else {
                                var miao:String = Num%60+"";
                        }
                        time_txt.text = "剩余时间:"+fen+miao;
                        Num--;
                }
                if (Num == 29 && ringif == true) {
                        ring.start();
                }
                if (Num<30) {
                        time_txt.textColor = 0xFF3300;
                }
                if (Num<0) {
                        timeB = true;
                        playif = false;
                        time_txt.text = "时间到";
                        clearInterval(ID);
                        alarm.start();
                }
        }
        time_func();
        ID = setInterval(time_func, 1000);
}
function pausing() {
        if (timeB == true) {
                timeB = false;
                ctrl_btn.gotoAndStop("start");
        } else {
                timeB = true;
                ctrl_btn.gotoAndStop("pause");
        }
        ringif = false;
}
this.reset_btn.onPress = function() {
        reseting();
};
function reseting() {
        clearInterval(ID);
        Num = totalNum;
        timeB = true;
        playif = false;
        ctrl_btn.gotoAndStop("start");
        time_txt.textColor = 0;
        time_txt.text = "计时停止";
}

TOP

发新话题