javascript - 当我的脚本运行时 Google Chrome 卡住

标签 javascript crash freeze phaser-framework

上下文: 我正在制作流行游戏《贪吃蛇》的一个版本。当我试图避免食物出现在蛇的各个部位的同一位置时,我遇到了一些问题。

所以我使用 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 坐标的值,您的函数可能会导致无限循环。

关于javascript - 当我的脚本运行时 Google Chrome 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43007766/

相关文章:

c++ - C++ 中的 ruby​​ `Object#freeze` 通讯器是什么?

c# - Visual Studio 2013 - WPF 属性定期卡住

javascript - 从 JSON 加载数据表时出错

javascript - p5.j​​s 控制我播放的帧数

javascript - 对于可以多次加载的ajax页面,如何处理只加载一次js

ios - 崩溃,终止原因 0xdead10cc

javascript - Backbone.Marionette View 元素初始化位置

ios - 我的应用程序很简单应用程序崩溃了

ios - 为什么这不会崩溃?

Java GUI 卡住