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.x
和 food.y
进行比较,您从不在循环内更新它们:
if (snake[i].x === food.x && snake[i].y === food.y) {
我相信您想将它与 randomX
和 randomY
进行比较:
if (snake[i].x === randomX && snake[i].y === randomY) {
根据 food
的坐标值,您的函数可能会导致无限循环。
上下文: 我正在制作流行游戏 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.x
和 food.y
进行比较,您从不在循环内更新它们:
if (snake[i].x === food.x && snake[i].y === food.y) {
我相信您想将它与 randomX
和 randomY
进行比较:
if (snake[i].x === randomX && snake[i].y === randomY) {
根据 food
的坐标值,您的函数可能会导致无限循环。