javascript - 迭代二维数组

标签 javascript arrays html canvas

我正在尝试编写一个 JavaScript 程序,在 HTML5 Canvas 上呈现 8x8 的污垢瓷砖网格。但是,当我运行此代码时,它会在运行 draw_terrain() 函数时抛出错误消息,这似乎是 blockArray.length 组件的问题。有人可以向我解释如何解决这个问题吗?提前致谢。

//Define initial canvas variables and images

var canvas;
var ctx;
var WIDTH = 800;
var HEIGHT = 800;
var dirt = new Image();
dirt.src = 'dirt.png';

//Function called to initialise canvas variables and run draw on interval

function init(){
    canvas = document.getElementById('myCanvas');
    ctx = canvas.getContext('2d');
    return setInterval(draw, 15);
}

//Function that generates an 8x8 Array called blockArray

function gen_terrain(){

var blockArray = new Array(8);

for(var i=0; i<blockArray.length; i++) {
    blockArray[i] = new Array(8);
    for(var j=0; j<blockArray[i].length; j++){
        blockArray[i][j] = 0;
    };
};
}

//Function that returns a random number between a min and max

function randomRange (min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function draw_terrain(){
    for(var i=0; i<blockArray.length; i++) {
        for(var j=0; j<blockArray[i].length; j++){
            ctx.drawImage(dirt,(n-1)*32,(j-1)*32);
        };
    };
}

function draw(){
    draw_terrain();
}

gen_terrain();
init();

最佳答案

正如其他人所解释的那样,您的问题是您用于构建数组的变量在绘制发生时将不存在。只需将数组声明放在函数之外,问题就会消失。

请参阅下面的评论:

function init(){
    canvas = document.getElementById('myCanvas');
    ctx = canvas.getContext('2d');
    return setInterval(draw, 15);
}

//Function that generates an 8x8 Array called blockArray
var blockArray = []; // <== has to be global (outside function).

function gen_terrain(){
    // Not here -> var blockArray = [];
    for(var i=8; i--;) {
        blockArray[i] = [0,0,0,0,0,0,0,0];
    };
}

Example

关于javascript - 迭代二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13168358/

相关文章:

html - 最小化时内容适合屏幕?

javascript - 有没有办法让复选框在单击时将数字 "1"添加到数字类型框中?

javascript - 我无法使用javascript从android ajax获取responseText的数据

javascript - Kendo图表数据标签格式

javascript - Bluemix 单点登录不显示登录页面

java - 我的数组中发生了奇怪的事情

javascript - 检查多个字符串以匹配多个正则表达式(均为数组)

javascript - 在 JavaScript 中将数组转换为对象

javascript - 不同大小的圆的 RangePoints

html - flex-grow 最大值或缩小元素之间空间的边距