更新游戏难度的正确方法

时间:2015-02-08 06:02:49

标签: actionscript-3 timer flash-cs6

大家好,我想知道更新游戏难度的最佳方法是什么。所以你得到的分数越多我希望舞台上的计时器对象减少到更低的数量,这样敌人可以更快地出来,并且舞台上会有更多的东西我有我的主要功能处理这个称为updateDifficulty();

在我的构造函数中,我将计时器启动到其默认刻度值,然后在该函数中更改它们,如下所示:

    private function updateDifficulty():void 
    {
        if (difficultyUpdate) return;

        if (nScore >= 100)
        {


            tSeagullTimer.removeEventListener(TimerEvent.TIMER, addSeagull);
            tSeagullTimer.stop();

            tSeagullTimer = new Timer(8000);
            //listen for the timer
            tSeagullTimer.addEventListener(TimerEvent.TIMER, addSeagull, false, 0, true);
            tSeagullTimer.start();

            difficultyUpdate = true;
        }

        difficultyUpdate = false;
        if (nScore >= 300 && bombBoolean)
        { 

            addBomb();
            bombBoolean = false

            tSeagullTimer.removeEventListener(TimerEvent.TIMER, addSeagull);
            tSharkTimer.removeEventListener(TimerEvent.TIMER, addShark);
            tSeagullTimer.stop();
            tSharkTimer.stop();

            tSharkTimer = new Timer(4000);
            //Listen for timer intervals/ticks
            tSharkTimer.addEventListener(TimerEvent.TIMER, addShark,false,0,true);
            //Start timer object
            tSharkTimer.start();

            tSeagullTimer = new Timer(6000);
            //listen for the timer
            tSeagullTimer.addEventListener(TimerEvent.TIMER, addSeagull, false, 0, true);
            tSeagullTimer.start();

           difficultyUpdate = true;
        }

}

它在很大程度上起作用,但有时我看到定时器不时停止工作。有更好的方法来更改计时器值吗?

1 个答案:

答案 0 :(得分:1)

见这部分:

    if (nScore >= 100)
    {
        //...skip...
        difficultyUpdate = true;
    }

    difficultyUpdate = false;
    if (nScore >= 300 && bombBoolean)
    {
        //...skip...
在第一个区块中的“difficultyUpdate = true”将始终被“difficultyUpdate = false”覆盖。

我不知道这是不是原因,但无论如何这都是一个明显的错误。

另外,我会按不同顺序放置这些块。首先,分数较大的区块,接下来分数较小的区块,并在每个区块中放置一个返回语句。显然,如果得分> 300,你不需要检查分数> 100部分。

我也不会使用计时器。我只是在你应该已经拥有的Event.ENTER_FRAME处理程序中使用计数器。所以它看起来像:

// (inside your Event.ENTER_FRAME handler)
if (seagullTickCount) {
    seagullTickCount--;
} else {
    addSeagull();
    seagullTickCount = getSeagullTickCount(); // here you will use difficulty
}

此外,为每个滴答计数都有一个单独的功能是不好的,但我只是为了说明目的而使用它。