Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以反复调用函数,但不重置其以前的值?_Javascript_Arrays_Function_Canvas - Fatal编程技术网

Javascript 是否可以反复调用函数,但不重置其以前的值?

Javascript 是否可以反复调用函数,但不重置其以前的值?,javascript,arrays,function,canvas,Javascript,Arrays,Function,Canvas,因此,我正在创建一个flappy bird游戏(如果你了解这个游戏是什么,这将使你更容易理解我将要说的话),在这个游戏中,我有两个管道。其中一条管道位于最低y值(600px)处,另一条管道从y值0处开始。因此,这些管道实际上具有相反的y值,但具有相同的X值(X值也会移动,但它们仍然是相同的X值)。管道的高度也是随机生成的问题从这里开始:我想让这段代码在经过大量tubeX像素后(一个时间间隔也可以工作),我想添加另一组管道,并对该值执行相同的操作。但旧管道的值必须保持不变。我认为某种数组是最好的,

因此,我正在创建一个flappy bird游戏(如果你了解这个游戏是什么,这将使你更容易理解我将要说的话),在这个游戏中,我有两个管道。其中一条管道位于最低y值(600px)处,另一条管道从y值0处开始。因此,这些管道实际上具有相反的y值,但具有相同的X值(X值也会移动,但它们仍然是相同的X值)。管道的高度也是随机生成的问题从这里开始:我想让这段代码在经过大量tubeX像素后(一个时间间隔也可以工作),我想添加另一组管道,并对该值执行相同的操作。但旧管道的值必须保持不变。我认为某种数组是最好的,但我的javascript编码能力很低,在看到它之前,我不知道如何在代码中实现类似的东西

此位代码生成随机高度:

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个像素数后彼此堆叠在一起,但我不确定。如果您需要帮助,请提供一个检查,它允许您在单个包中存储函数和变量。