Flash精灵随着时间的推移变得越来越快

时间:2014-02-19 21:19:08

标签: actionscript-3 flash flashdevelop

我正在尝试在Flash中制作我的第一个游戏,它将被称为Pedestrian Run。这里的摇滚将朝向玩家,它应该以一致的速度前进,但是,每次重置到起点时,它会变得越来越快。有没有办法解决这个问题,因为我无法为我的生活做出这样的决定。任何帮助表示赞赏。这是关于pastebin的代码: Pedestrian Run Code

3 个答案:

答案 0 :(得分:1)

我认为递归函数中的setTimeout是一个非常糟糕的主意,它可能导致你的问题。使用ENTER FRAME事件进行游戏循环。

答案 1 :(得分:1)

@Iansen是正确的,你的问题是由持续调用的setTimeout引起的。

moveRock()中,你有一个setTimeout到moveRock。你的setTimeouts正在累积,这就是你看到翻译增加的原因。

最好是使用计时器,如下所示:

在班级变量中:

private var moveTimer:Timer;

init()添加此内容:

moveTimer = new Timer(25,0);
moveTimer.addEventListener( TimerEvent.TIMER, moveRock );
//you can call the moveTimer.start() anywhere you want, but this is fine
moveTimer.start();

然后,您的moveRockspawnRock应如下所示:

private function moveRock( e:TimerEvent ):void {
    rock.x -= 15;
    if (rock.x == char.x || rock.x == 0) {
        removeChild(rock);
        spawnRock();
    }
}

private function spawnRock():void {
    addChild(rock);
    rock.x = 750;
    rock.y = 520;
}

同样值得注意的是,在你当前的代码中,removeChild和addChild相当浪费,你只需稍微修改moveRock()即可。

private function moveRock( e:TimerEvent ):void {
    rock.x -= 15;
    if (rock.x == char.x || rock.x == 0) {
        rock.x = 750;
        rock.y = 520;
    }
}

答案 2 :(得分:0)

不要为rock.x更新使用常量值。使用变量并在每次重置"。

时更新它

请注意,在下面的示例中,我在您消磨了之前的摇滚之后进行了更新。

private var speed:Number = 15;

function moveRock():void {
        rock.x -= speed;
        if (rock.x == char.x || rock.x == 0) {
                this.removeChild(rock);
                speed += 1;
                spawnRock();
        }
        setTimeout(moveRock, 25);
}