Js setTimeout()不起作用

时间:2013-02-01 01:08:23

标签: javascript setinterval

我正在制作一个蛇游戏,就像你从看到我之前的问题时所知道的那样。我正在跟进这样的数组:

var snakeX = new Array();
var snakeY = new Array();

然后在for循环中:

for (var i = 0;i<=num;i++) {

    snakeX[0] = xCoord;

    snakeY[0] = yCoord;

    context.fillRect(snakeX[0], snakeY[0], sH, sW);

    xCoord = xCoord + 11;

    console.log('xCoord = ' + xCoord + ', yCoord = ' + yCoord);

}

并且xCoordyCoord vars都设置为0

我的问题是为什么这不起作用?

setInterval(function() {

    num++;  

}, 1000);

以下是我所拥有的一切:

function snake() {

    //Let's make the snake start at 4 squares wide, and 1 square tall

    function createSnake() {

        var xCoord = 0;

        var yCoord = 0;

        var snakeX = new Array();

        var snakeY = new Array();

        var num = 3;

        setInterval(function() {

            num = num + 1;  

        }, 1000);

        for (var i = 0;i<=num;i++) {

            snakeX[0] = xCoord;

            snakeY[0] = yCoord;

            context.fillRect(snakeX[0], snakeY[0], sH, sW);

            xCoord = xCoord + 11;

            console.log('xCoord = ' + xCoord + ', yCoord = ' + yCoord);

        }
    }
    createSnake();

}

snake();

2 个答案:

答案 0 :(得分:0)

您似乎永远不会修改xCoordyCoord。同样,你的“间隔”只是增加一个数字,它实际上并没有做任何其他事情。你需要有一些“重绘”功能来移动蛇。此外,您创建snakeXsnakeY作为数组,但只使用snakeX[0]snakeY[i] - 事实上,您甚至没有使用i迭代器。

总的来说,看起来您的代码有点像火车残骸。也许你的项目对你目前的技能水平有点雄心勃勃,你应该在尝试之前先研究一些基础知识。我不是想通过这样说来劝阻你,我只是想提供一些建议。

答案 1 :(得分:0)

如果你希望for循环每秒变长,你可以创建一个每秒增加一个全局变量的区间,然后在你的for循环中引用该全局变量,如下所示:

var num = 0;
var interval = setInterval(function () {
  num++;
}

function spin () {
  for(var i = 0; i < num; i++) {
    console.log(num);
  }
}

问题是,对于上面的代码真正做任何事情,你需要继续调用spin(),并且为了花费更长的时间你需要知道间隔已经过去,所以你可以做到以下几点:

var num = 0;
var interval = setInterval(function () {
  num++;
  for(var i = 0; i < num; i++) {
    console.log(num);
  }
}

让循环在增加全局变量的区间内执行以增加循环次数,我只是不明白你为什么要这样做。