首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新绘制一段画布(基于网格)

重新绘制一段画布(基于网格)
EN

Stack Overflow用户
提问于 2011-10-19 21:55:40
回答 1查看 123关注 0票数 2

我有一些柏林噪声生成一个“地图”:http://jsfiddle.net/rossc1/RKCdZ/ (为了在JSFiddle上工作而更新-谢谢@Ross)

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

从技术上讲,它是可以工作的,但偏移量是错误的,它会重新绘制错误的地图:(我已经和这个问题斗争了一段时间。感谢您的帮助!

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

附言:这是给我带来麻烦的部分:

代码语言:javascript
复制
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
                }

            }

        }
    }   
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-19 22:56:28

哦,天哪!我知道为什么。你会讨厌这个的。

ctx.rectctx.fillRect不是一回事!rect只用于路径,而fillRect不使用路径。您正在创建一条路径,使用带有先前颜色的fillRect,然后关闭完全空的路径!因此,进行以下两个更改之一:

代码语言:javascript
复制
    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();
    }

或者:

代码语言:javascript
复制
    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/

换句话说,你的数学一直都是对的!你只是用之前的颜色填充每个方块。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7822430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档