Google Chrome 当我的脚本是 运行 时冻结

Google Chrome freezes when my script is running

上下文: 我正在制作流行游戏 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 循环)上生成时,我将生成其他坐标。但是不知道什么原因,我的蛇吃完第一个食物后,游戏崩溃了, Google Chrome 的选项卡没有响应。 我认为循环有错误,但我找不到它。

您将蛇段的坐标与 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 的坐标值,您的函数可能会导致无限循环。