我有两个问题。
1 - 我有一个文本区域,我在其中匹配一个字符串。如果匹配则计时器将启动。但是这个条件很可能会不止一次满足,所以我想给出一个条件,如果计时器已经运行了什么都不做,if(!timer.running)
然后启动计时器。但它每次都会重置计时器。
2 - 我有一个聊天窗口。对于每个用户活动,将向其显示一个句子。对于每个添加的句子,我必须执行一些操作。因此,我已经为单个函数中的每个句子执行了条件和操作,但问题是每次先前已执行的命令也会再次执行。 (例如上面的问题1.)所以一旦它匹配第一个字符串,它应该从文本区域的第二行开始搜索,我认为这可以做到这一点。任何帮助将不胜感激。
public function updateMessage(updateMsg:String) : void
{
userActivities.text+=updateMsg+"\n";
if(userActivities.text.indexOf("user connected",0)!=-1)
{
userTimer=new Timer(delay);
if(!userTimer.running)
{
basetmr=getTimer();
userTimer.addEventListener(TimerEvent.TIMER,chkUserActivities);
userTimer.start();
}
else
{
//trace("timerCount.."+userTimer.currentCount);
}
}
else if(userActivities.text.indexOf("user changed the image",0)!=-1 )
{
userActivities.text+="Click ReleaseDetails button to release your details to visitor";
}
else if(userActivities.text.indexOf("user quit the session",0)!=-1)
{
userTimer.stop();
}
}
答案 0 :(得分:0)
你的代码错了。以下是一些评论:
// this line creaets a new timer
userTimer=new Timer(delay);
// no code here to start the timer running
// userTimer.running will always be false and this condition will always be true
if(!userTimer.running)
我敢打赌,如果你将方法的第一行改为这样的话:
if(userTimer){
userTimer=new Timer(delay);
}
它会工作,因为你不会在ever方法调用上重新初始化计时器。
答案 1 :(得分:0)
目前您正在创建一个新计时器,然后检查它是否正在运行,所以我认为第一部分将通过改变来改进
userTimer=new Timer(delay);
if(!userTimer.running)
{
basetmr=getTimer(); //etc
类似
if(!userTimer.running)
{
userTimer=new Timer(delay);
basetmr=getTimer(); //etc
对于第2部分,我不熟悉flex以便能够提供帮助,但不是检查userActivities.text
,而是要检查它的最新子部分,例如最后一句。