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

时间:2017-05-23 15:31:02

标签: javascript arrays function canvas

所以我正在创造一个飞扬的鸟类游戏(如果你了解这个游戏是什么它会让你更容易理解我要说的话)并且在这个游戏中我有2个管道。其中一个管道位于最低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();
   }

1 个答案:

答案 0 :(得分:0)

我最终做的是在pipeX()函数中创建一个while循环。我还将tubeX的值更改为800,因此它可以在400 px时更有效地创建新管道。这可能不是最有效的方式,但它看起来不错!

function pipeX() {
var lastTime = 0;
velocityX += force;
velocityX *= 0.9;
tubeX += velocityX;

while (tubeX < -25) {
 show();
 if (tubeX = 400)    {
     new pipeY();
     new show();
     }
   }
}