【发布时间】:2015-11-02 18:29:12
【问题描述】:
我正在 HTML5 画布中构建一个简单的关卡放置脚本,但我在实际放置每个元素时遇到了麻烦。我编写了一个创建网格的 for 循环,然后我尝试创建一个新循环,该循环遍历我的“级别”数组中的每个语句以设置每个图像的位置。我以前没有用 Canvas 做过很多事情。因此,我不确定在放置这些图像方面我做错了什么;我在 jQuery 中写了一些与此非常相似的东西,效果很好 - 事实上,我复制并粘贴了代码以开始,但它似乎在 Canvas 中不起作用。任何帮助将不胜感激!
这是代码的 sn-p;请原谅过度评论,这只是当我无法理解为什么某些事情不起作用时我会做的事情。这就像一个内嵌的橡皮鸭。
var $levelArray = [
[0, 0, 0, "blue", "blue"],
[0, "gray", 0, 0, 0],
["blue", "blue", "green", 0, "blue"],
["blue", 0, "yellow", 0, 0],
[0, 0, 0, "gray", 0],
["red", 0, 0, 0, 0]];
var border = 5, // set grid details
spaceWidth = 80,
spaceAmount = 5;
// create a tiled image
function makeTile(imageUrl, horizontalPosition, verticalPosition) {
var tile = new Image();
tile.onload = function() {
context.drawImage(tile, horizontalPosition, verticalPosition);
}
tile.src = imageUrl;
}
// place the image tiles on the board
for (var i=0; i < ($levelArray.length - 1); i++) {
var row = $levelArray[i]; // set each row's iterative position
var rowHeight = 5;
for (var j=0; j < row[j].length; j++) {
var rowPosition = 5; // set the left margin of each element
if (row[j] == 0) {
rowPosition += (spaceWidth + 5); // if an element does not exist, jump forwards to the next space
} else {
//if one DOES exist, place an image in this space
makeTile("http://lorempixel.com/80/80", rowPosition, rowHeight);
rowPosition += (spaceWidth + 5); // then move to the next space
};
};
rowHeight += (spaceWidth + 5); // once a row is complete, drop to the next row's positions
};
我在这里的代码笔中有这个:http://codepen.io/sarsparillo/pen/vNrWQG
我不确定为什么它一次只加载一张图片并将其放在我网格上的 0,0 空间中;在 jQuery 中使用非常相似的代码(当前代码,到处都是,有点不干净,在这里 - http://codepen.io/sarsparillo/pen/GpdjYY)将元素放在正确的位置就好了。
更多,当我在那些 for 循环中添加一个 console.log 语句时,我真的无法弄清楚它到底从哪里获取数据。就像,一次迭代给了我“绿色绿色黄色”作为 row[j] 中的项目,另一个“蓝灰色蓝色” - Canvas 在遍历数组时做了一些绝对奇怪的事情吗?我看不出它是怎么做到的,因为这只是 Javascript,但是......?
有没有人知道为什么会发生这种情况,或者我可以如何解决这个问题的任何提示?从理论上讲,它应该只是将空间宽度+边距宽度添加到每个“正方形”的起点,所以我不确定为什么它只是......不是。
【问题讨论】:
标签: javascript html canvas grid iteration