【发布时间】:2014-12-24 03:11:56
【问题描述】:
我正在尝试类似 perlin 噪声图,但我的数组不会重复!结果数组值超过了预期值(>2)。
数组“map”只包含 1 和 0。
map 的副本被制作(称为 cache)并将数组“cache”中的值添加到数组“地图”。
cache 的某些值被多次添加到 map。
问题是对“map”所做的任何更改似乎会在“cache”上重复,非常令人沮丧。我对javascript不够熟悉,不知道我做错了什么。
相关代码:
var map = terrainSeed(); //returns an array of 1's & 0's (random)
map = terrainGen(map, map, 2, 2);
function terrainGen(mapNew, mapOld, x, y)
{
var cache = mapOld.slice(0);
var asdf = 0;
//if(x >=2) if(y >=2)
for(var i = 0; i < cache.length; i++)
{
for(var j = 0; j < cache[i].length; j++)
{
var save = mapNew[i][j];
asdf = cache[(Math.floor(i/x))][(Math.floor(j/y))];
mapNew[i][j] += asdf;
if(mapNew[i][j]>2) alert(save + " + " + asdf + " = " + mapNew[i][j] + " (" + i + ", " + j + ")");
}
}
return mapNew;
}
【问题讨论】:
-
slice(0) 是多余的 var cache = mapOld.slice(0);相当于说 var cache = mapOld;
-
slice()方法返回数组一部分的浅拷贝 -
当你定义一个变量时,你不是在“缓存”,你只是在创建一个引用。变量不等于新值。一个变量追溯原始数据。
-
@elijuh 那么为什么要更改缓存效果 mapNew?
-
@Xero 它不应该是一个参考,它应该是一个“独立”的重复数组。如果 slice 不是正确的函数是什么?
标签: javascript arrays slice perlin-noise