Javascript 是否可以反复调用函数,但不重置其以前的值?
因此,我正在创建一个flappy bird游戏(如果你了解这个游戏是什么,这将使你更容易理解我将要说的话),在这个游戏中,我有两个管道。其中一条管道位于最低y值(600px)处,另一条管道从y值0处开始。因此,这些管道实际上具有相反的y值,但具有相同的X值(X值也会移动,但它们仍然是相同的X值)。管道的高度也是随机生成的问题从这里开始:我想让这段代码在经过大量tubeX像素后(一个时间间隔也可以工作),我想添加另一组管道,并对该值执行相同的操作。但旧管道的值必须保持不变。我认为某种数组是最好的,但我的javascript编码能力很低,在看到它之前,我不知道如何在代码中实现类似的东西 此位代码生成随机高度:Javascript 是否可以反复调用函数,但不重置其以前的值?,javascript,arrays,function,canvas,Javascript,Arrays,Function,Canvas,因此,我正在创建一个flappy bird游戏(如果你了解这个游戏是什么,这将使你更容易理解我将要说的话),在这个游戏中,我有两个管道。其中一条管道位于最低y值(600px)处,另一条管道从y值0处开始。因此,这些管道实际上具有相反的y值,但具有相同的X值(X值也会移动,但它们仍然是相同的X值)。管道的高度也是随机生成的问题从这里开始:我想让这段代码在经过大量tubeX像素后(一个时间间隔也可以工作),我想添加另一组管道,并对该值执行相同的操作。但旧管道的值必须保持不变。我认为某种数组是最好的,
function pipeY() {
var top = Math.random() * -32 + 1;
height1 = top * 10;
var bottom = Math.random() * 32 + 1;
height2 = bottom *10
loop();
}
这将为管道创建移动X值:
tubeX = 400;
velocityX = 0;
force = -0.5;
function pipeX() {
velocityX += force;
velocityX *= 0.9;
tubeX += velocityX;
}
这将创建两个彼此相对的管道:
function show() {
var tubeHeight1 = 600;
var tubeHeight2 = 0;
ctx.fillStyle="green";
tube1 = ctx.fillRect(tubeX,tubeHeight1,5,height1);
tube2 = ctx.fillRect(tubeX,tubeHeight2,5,height2);
ctx.stroke();
}
最后,我在pipeX()函数中创建了一个while循环。我还将tubeX的值更改为800,这样它就可以在400px下更有效地创建一个新管道。这可能不是最有效的方法,但看起来不错
function pipeX() {
var lastTime = 0;
velocityX += force;
velocityX *= 0.9;
tubeX += velocityX;
while (tubeX < -25) {
show();
if (tubeX = 400) {
new pipeY();
new show();
}
}
}
函数pipeX(){
var lastTime=0;
速度x+=力;
速度x*=0.9;
tubeX+=velocityX;
而(管体<-25){
show();
如果(管x=400){
新派比();
新节目();
}
}
}
您只需要单独的管道实例,因此当您执行tubeX+=velocityX
时,您只会影响该实例。下一个管道有它自己的值tubeX
。是的,当我在实验一些代码时,我想我看到管道在n个像素数后彼此堆叠在一起,但我不确定。如果您需要帮助,请提供一个检查,它允许您在单个包中存储函数和变量。