编辑:这是一个完整代码的pastebin: http://pastebin.com/EVAyxh2N
我在下面粘贴了我的代码。如果有人能弄清楚为什么我会从中获得无限循环,我很乐意看到!从本质上讲,我在foor-loop中有一个for循环,并且工作正常,但我想将rect数据存储在一个数组中以便稍后可以访问它,所以我创建了另一个for循环来处理来自然后,为每个数组创建矩形。
// Create custom "tile" object
function tileObj(x, y, img) {
this.x = x;
this.y = y;
this.img = img;
}
// Create empty array to store tile data
var tiles = [];
// Create tile-grid, map.grid sized rectangles that will adopt tileset images
function gridTiles() {
for (var x = 0; x <= map.width; x += map.grid) {
for (var y = 0; y <= map.height; y += map.grid) {
var newTile = new tileObj(x, y, "red");
tiles.push(newTile);
for (var z = 0; z < tiles.length; z++) {
tile = tiles[z];
ctx.rect(tile.x, tile.y, map.grid, map.grid);
ctx.fillStyle = tile.img;
ctx.fill();
}
}
}
}
gridTiles();
答案 0 :(得分:2)
如果map.grid为<= 0
,则可能是无限循环。
我认为在创建了所有tile对象后,你想要z
for循环:
// Create custom "tile" object
function tileObj(x, y, img) {
this.x = x;
this.y = y;
this.img = img;
}
// Create empty array to store tile data
var tiles = [];
// Create tile-grid, map.grid sized rectangles that will adopt tileset images
function gridTiles() {
for (var x = 0; x <= map.width; x += map.grid) {
for (var y = 0; y <= map.height; y += map.grid) {
var newTile = new tileObj(x, y, "red");
tiles.push(newTile);
}
}
for (var z = 0; z < tiles.length; z++) {
tile = tiles[z];
ctx.rect(tile.x, tile.y, map.grid, map.grid);
ctx.fillStyle = tile.img;
ctx.fill();
}
}
gridTiles();
仅供参考,除非map.grid
为<= 0
,否则我认为这不是一个无限循环。它似乎很可能是一个非常非常缓慢的循环执行循环,因为你在每一块瓷砖上循环很多次。
答案 1 :(得分:1)
gridTiles如何访问地图对象?它在窗口或文档范围内吗?
无论哪种方式,请确保网格值为正,否则您将进入无限循环。
function gridTiles(){
var grid = map.grid; //assume you have access to it
if (grid<=0){
console.warn('Invalid grid width');
return;
}
// continue your function
}