我正在尝试在Flash中制作我的第一个游戏,它将被称为Pedestrian Run。这里的摇滚将朝向玩家,它应该以一致的速度前进,但是,每次重置到起点时,它会变得越来越快。有没有办法解决这个问题,因为我无法为我的生活做出这样的决定。任何帮助表示赞赏。这是关于pastebin的代码: Pedestrian Run Code
答案 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();
然后,您的moveRock
和spawnRock
应如下所示:
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);
}