我的脚本运行时,Google Chrome会冻结

时间:2017-03-24 19:34:59

标签: javascript crash freeze phaser-framework

背景: 我正在制作流行游戏的版本,Snake。当我试图避免在我蛇的同一个地方出现食物时,我遇到了一些问题。

所以我使用框架Phaser生成了这段代码:

generateFood: function() {
        var randomX, randomY;
        var rightLocation = false;
        var foodOnSnake = false;

        while(rightLocation === false) {
            randomX = Math.floor(Math.random() * (this.game.width / squareSize)) * squareSize;
            randomY = Math.floor(Math.random() * (this.game.height / squareSize)) * squareSize;
            foodOnSnake = false;

            for (var i = 0; i < snake.length; i++) {
                if (snake[i].x === food.x && snake[i].y === food.y) {
                    foodOnSnake = true;
                    break;
                }
            }

            if(foodOnSnake === false) {
                rightLocation = true;
            }
        }
        food = this.game.add.sprite(randomX, randomY, 'snake', 15);
    }

目标是在游戏中创建一些随机坐标。并且,虽然食物是在蛇的一部分(for循环)上生成的,但我将生成其他坐标。但由于未知的原因,在我的蛇吃了第一道食物后,游戏崩溃了,谷歌Chrome的标签没有响应。 我认为循环有一个错误,但我无法找到它。

1 个答案:

答案 0 :(得分:4)

您将蛇的片段的坐标与food.xfood.y进行比较,您永远不会在循环内更新:

if (snake[i].x === food.x && snake[i].y === food.y) {

我认为您希望将其与randomXrandomY进行比较:

if (snake[i].x === randomX && snake[i].y === randomY) {

根据food坐标的值,您的函数可能会导致无限循环。