Actionscript 3 Actionscript 3计时器未知,如何修复此问题?

Actionscript 3 Actionscript 3计时器未知,如何修复此问题?,actionscript-3,flash,timer,Actionscript 3,Flash,Timer,我正在制作一个记忆闪存游戏,其中有一个计时器,可以给你一定的时间来完成一副牌。此计时器的代码如下所示: public function memory():void { levelDuration = 10; gameTime = levelDuration; var gameTimer:Timer = new Timer(1000,levelDuration); gameTimer.addEventListener(TimerEvent.TIMER

我正在制作一个记忆闪存游戏,其中有一个计时器,可以给你一定的时间来完成一副牌。此计时器的代码如下所示:

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");
    }
现在,这个很好用。计时器倒计时,当它过期时,它会将您带到gameover屏幕。但是,当你在时间到期前完成游戏时,计时器不会停止。当它决定游戏已经用完时,甚至当你开始一个新游戏时,它也会将你带回游戏屏幕

我试图通过将gameTimer.stop()放在其他函数中来解决这个问题,这些函数可以将您带到gameover屏幕,但随后出现了另一个问题。这是在尝试在其他功能中停止计时器时发生的,例如此功能(播放时停止按钮):

这将给我一个编译错误1120:访问未定义的属性gameTimer。 我知道gameTimer通常只有在函数侦听TimerEvent时才会受到影响,但我看不到任何其他方法可以做到这一点

我曾尝试将gameTimer设置为公共变量,但它不允许我在主内存函数中这样做。 此外,当我试图在函数外(但在类内)将其定义为公共变量时,计时器仍将倒计时。但当它过期时,它只会给出一个随机的高数值作为回报,而不会进入游戏屏幕


我希望对我的问题的解释不是太模糊,希望你能帮助我解决这个问题。这是一个学校项目,很快就要交了!另外,我无法单独用互联网来解决这个问题:(几次尝试只会让事情变得更糟,我现在已经走了这么远,恐怕会把事情搞砸。

你把它声明为公共变量可能是对的……但是你在哪里声明的呢

在AS(所有版本)中,您具有函数作用域。这意味着,如果您在函数中声明变量,则该变量仅在该函数中“存在”(可访问)。请检查您声明变量的位置:

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();
}

这将解决您的所有问题。

是的!这就解决了!计时器会在我需要时立即停止。非常感谢:)
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();
}
private var gameTimer:Timer;

public function memory():void
{
      levelDuration = 10;
      gameTime = levelDuration;
      gameTimer = new Timer(1000,levelDuration);
      gameTimer.addEventListener(TimerEvent.TIMER, updateTime);
      gameTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timeExpired);
      gameTimer.start();
}