试图从数组中获取随机图像,却得到了相同的结果
Trying to get a random image from array, get all the same instead
我试图在画布上渲染一个基于瓷砖的地图,用0和1的数组表示不同的图像下面是我创建数组的方法:
var map = [];
function randomImageArray(){
var length = x * y;
var arrayLength = 0;
while(arrayLength < length){
var randomImg = Math.floor(Math.random() * 2) * 1;
if(randomImg == 0){
//mapArray.push('0');
map.push(0);
arrayLength += 1;
} else {
// mapArray.push('1');
map.push(1);
arrayLength += 1;
}
}
}
,这就是我如何读取它,并从中绘制图像
function drawBackground(){
alert(map.toString());
alert(map.length);
for(var tileX = 0; tileX < x; tileX ++) {
for(var tileY = 0; tileY < y; tileY++) {
for(var p = 0; p < map.length; p++){
if(map[p] === 0){
ctx.drawImage(image, tileX * tileSize,tileY * tileSize , tileSize, tileSize);
} else if(map[p] === 1) {
ctx.drawImage(image2, tileX * tileSize,tileY * tileSize , tileSize, tileSize);
}
}
}
}
}
我的警报弹出一个充满1和0的数组,长度为300但在我的画布上,我得到的是一个充满image1或image2的地图
您的drawBackground()
函数存在逻辑问题。对于外部循环的每次迭代,您都循环遍历整个map
,并且唯一显示的图像是map
中最后一个值所指示的图像。试试这个:
function drawBackground() {
var tileX,
tileY,
imageIdx;
for (tileX = 0; tileX < x; tileX ++) {
for (tileY = 0; tileY < y; tileY++) {
imageIdx = map[tileX * tileY];
if (imageIdx === 0) {
ctx.drawImage(image, tileX * tileSize,tileY * tileSize , tileSize, tileSize);
} else if (imageIdx === 1) {
ctx.drawImage(image2, tileX * tileSize,tileY * tileSize , tileSize, tileSize);
}
}
}
}
您可以通过引用数组中的图像并使用map
值对其进行索引来进一步清理:
var images = [image, image2];
function drawBackground() {
var tileX,
tileY;
for (tileX = 0; tileX < x; tileX ++) {
for (tileY = 0; tileY < y; tileY++) {
ctx.drawImage(images[map[tileX * tileY]],
tileX * tileSize,
tileY * tileSize,
tileSize,
tileSize);
}
}
}
相关文章:
- 如何实现基于两个数组创建结果数组的逻辑
- 无法获取所需的结果数组
- 动态结果数组需要使用 Angular JS 与不同布局的表绑定
- 如何从谷歌地图API返回的结果数组中提取城市名称
- 如何查询具有特定 id 的 json 文件并获取结果数组
- 如何将谷歌放置 API 结果数组与淘汰赛集成
- 是否保证 document.querySelectorAll(“input[type=checkbox”) 的结果数组的
- 如何使用 Parse.promise javascript 定义一个承诺数组并获取结果数组 [parse.com]
- HTML5 语音 API - 重置结果数组
- 如何访问在 ajax 中返回的结果数组
- 输出一个结果数组,其中包含给定数组的唯一元素的分组计数
- Javascript返回基于日期的平均测试结果数组
- NodeJS ExpressJS如何打印API结果数组
- 在添加到结果数组之前,请检查值是否存在
- 为什么String.match在结果数组中返回重复项
- 如何合并两个只有唯一或不同值的复杂JSON对象,这些值只显示在结果数组中
- Javascript -根据字符拆分字符串,但将其保留在结果数组中
- Javascript, array concat将Windows Object添加到结果数组中,但它不适用于Firefo
- 如何分割正则表达式空间和标点匹配,但保留结果数组中的标点符号
- 尝试从json树状结构JavaScript递归创建一个结果数组