【发布时间】:2023-03-09 05:03:01
【问题描述】:
我正在构建一个记忆 Flash 游戏,其中有一个计时器,可以让您有一定的时间来完成一副纸牌。这个定时器的代码如下所示:
public function memory():void
{
levelDuration = 10;
gameTime = levelDuration;
var gameTimer:Timer = new Timer(1000,levelDuration);
gameTimer.addEventListener(TimerEvent.TIMER, updateTime);
gameTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timeExpired);
gameTimer.start();
}
function updateTime(e:TimerEvent):void // what happens when the time runs out
{
// your class variable tracking each second,
gameTime--;
//update your user interface as needed
timeText.text = "Tijd : " + String(gameTime); //gameTime is defined before the public function memory
}
function timeExpired(e:TimerEvent):void
{
var gameTimer:Timer = e.target as Timer;
gameTimer.removeEventListener(TimerEvent.TIMER, updateTime);
gameTimer.removeEventListener(TimerEvent.TIMER, timeExpired);
finalScore = score;
musicchannel.stop();
gameTimer.stop();
MovieClip(root).gotoAndStop("gameover");
}
现在,这工作正常。计时器倒计时,当它到期时,它会将您带到游戏结束屏幕。但是,当您在时间到期之前完成游戏时,计时器不会停止。当它决定它已经用完时,它会带你回到游戏结束屏幕,即使你已经开始了一个新游戏。
我尝试通过将 gameTimer.stop() 放入其他将您带到游戏结束屏幕的函数来解决此问题,但随后出现了另一个问题。尝试在其他功能中停止计时器时发生这种情况,例如这个(播放时停止按钮):
function stopplaying(event:MouseEvent){
gameTimer.stop();
finalScore = score;
musicchannel.stop();
MovieClip(root).gotoAndStop("introduction");
}
这会给我一个编译错误 1120:访问未定义的属性 gameTimer。 我知道如果该函数侦听 TimerEvent,则 gameTimer 通常只能在函数内受到影响,但我看不到以任何其他方式执行此操作的任何选项。
我尝试将 gameTimer 设为公共变量,但它不允许我在主内存函数中执行此操作。 此外,当我尝试将其定义为函数之外的公共变量时,但在类中,计时器仍会倒计时。但是当它到期时,它只是给出一个随机的高数字作为回报,并且不会进入游戏结束屏幕。
我希望对我的问题的解释不是太含糊,并且您能够帮助我解决这个问题。这是一个学校项目,很快就要到期了!另外,我不能仅靠互联网自己解决这个问题:(几次尝试只会让事情变得更糟,现在我已经走到了这一步,我害怕把事情搞砸。
【问题讨论】:
标签: actionscript-3 flash timer