我有一些柏林噪音产生一个“地图”:
http://jsfiddle.net/rossc1/RKCdZ/(更新为使用JSFiddle-谢谢@Ross)
我真正想要的是重新绘制“reddot”周围的部分(使用WASD移动)。
从技术上讲,它确实起作用,但偏移量不对,而且它重新绘制的地图也不对:(
我已经和这个斗争了一段时间了。为你的帮助干杯!
附笔
忽略没有错误检查的事实:)
p.p.s.公司
这一节让我很困扰:
function updateMap() {
//update display functions here
for (x = yX-8; x <= yX+8; x++) {
for (y = yY-8; y <= yY+8; y++) {
if (x >= 0 && y >= 0 && x < mapSize && y < mapSize) {
if (perlin[x][y] === 0) {
rect(7*(x),7*(y), 7, 7, '#6fb4db'); //water
} else {
rect(7*(x),7*(y), 7, 7, 'rgb('+perlin[x][y]+','+ (perlin[x][y] + 50) +','+perlin[x][y]+')'); //land
}
if (x === yX && y === yY) {
rect(7*(x),7*(y), 7, 7, 'rgb(225,0,0)'); //you
}
}
}
}
}
最佳答案
哦,天哪!我知道为什么。你会讨厌这个的。ctx.rect
和ctx.fillRect
不是一回事!rect
仅用于路径,fillRect
不使用路径。您正在创建一条路径,使用前一种颜色的fillRect,然后关闭完全空的路径!所以做两个改变之一:
function rect(x,y,w,h,col) {
ctx.beginPath();
// rect and not fillRect!
ctx.rect(x,y,w,h);
if (col) {
ctx.fillStyle = col;
}
//ctx.stroke();
ctx.closePath();
ctx.fill();
}
或:
function rect(x,y,w,h,col) {
// set fillStyle BEFORE calling fillRect!
if (col) {
ctx.fillStyle = col;
}
ctx.fillRect(x,y,w,h);
}
示例:http://jsfiddle.net/RKCdZ/6/
换句话说,你的数学一直都是对的!你只是用以前的颜色填充每个方块。