Actionscript 3计时器未识别,我该如何解决这个问题?

时间:2014-06-13 14:00:23

标签: actionscript-3 flash timer

我正在构建一个记忆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。 我知道gameTimer通常只能在函数内受影响,如果该函数侦听TimerEvent,但我没有看到任何其他选项以此方式执行此操作。

我试图让gameTimer成为一个公共变量,但它不允许我在主内存函数中这样做。 此外,当我尝试从函数中定义一个公共变量时,但在类中,计时器仍将倒计时。但是当它到期时,它只会给出一个随机的高数字作为回报而不会进入游戏画面。

我希望我的问题的解释不是太模糊,你能帮我解决这个问题。这是一个学校项目,很快就会到期!另外,我无法单独通过互联网解决这个问题:(有几次尝试只会让事情变得更糟,我现在害怕搞砸了,因为我已经到了这么远。

1 个答案:

答案 0 :(得分:2)

通过将其声明为公共变量,你可能正确地做了这件事......但你在哪里宣布它?

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

这意味着你的变量&#34; gameTimer&#34;是函数memory()的本地。您无法在此函数之外的任何位置使用您的变量,因为它仅存在于memory()内部。要解决此问题,您必须将其移出函数:

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

这将解决您的所有问题。