javascript - 重绘 Canvas 的一部分(基于网格)

标签 javascript html canvas

我有一些柏林噪声生成“ map ”: http://jsfiddle.net/rossc1/RKCdZ/ (已更新以在 JSFiddle 上工作 - 感谢@Ross)

我真正想要的是只重绘“红点”周围的部分(使用 WASD 移动)。

从技术上讲,它确实可以工作,但是偏移量错误并且重绘 map 错误:( 我一直在努力解决这个问题。为您的帮助干杯!

附注 忽略没有错误检查的事实:)

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.rectctx.fillRect 不是一回事! rect 仅用于路径,fillRect 不使用路径。您正在创建一条路径,使用 fillRect 和 previous 颜色,然后关闭您完全空的路径!因此,进行以下两项更改之一:

    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/

换句话说,您的数学一直都是正确的!您只是用以前的颜色填充每个方 block 。

关于javascript - 重绘 Canvas 的一部分(基于网格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822430/

相关文章:

javascript - JS/DOM 优化 : using :after content styling instead of altering innerHTML

javascript - 使用CSS定位元素

javascript - 鼠标位置到等距图 block (包括高度)

javascript - 特定方向上经过 3 点的圆弧

javascript - 如何在 node.js 中创建路由并包含 html 代码

javascript - 将两个处理程序合并为一个 Jquery

javascript - 如果输入字段不匹配 10 位数字,如何禁用按钮

Javascript 如何从我的网络应用程序中隐藏一个功能(通过使用 php?)

javascript - HTML5 Javascript 对象已被点击

iPad "3"HTML5 Canvas 绘图分辨率