Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这是HTML5中的错误还是我疯了?_Javascript_Html_Canvas_Html5 Canvas - Fatal编程技术网

Javascript 这是HTML5中的错误还是我疯了?

Javascript 这是HTML5中的错误还是我疯了?,javascript,html,canvas,html5-canvas,Javascript,Html,Canvas,Html5 Canvas,我是疯了还是以下是HTML5中的一个bug 我正在编写类似“游戏地图”的东西。它非常简单,下面是绘图代码: g2d.clearRect(0, 0, width, height); for(var i = minx; i < maxx; i++){ for(var j = miny; j < maxy; j++){ var drawx = i * tileWidth + posx;

我是疯了还是以下是HTML5中的一个bug

我正在编写类似“游戏地图”的东西。它非常简单,下面是绘图代码:

g2d.clearRect(0, 0, width, height);
            for(var i = minx; i < maxx; i++){
                for(var j = miny; j < maxy; j++){
                    var drawx = i * tileWidth + posx;
                    var drawy = j * tileHeight + posy;
                    g2d.drawImage(images["image0"], drawx, drawy);
                    g2d.fillText("x: " + i, drawx + 3, drawy + 10);
                    g2d.fillText("y: " + j, drawx + 3, drawy + 20);
                    g2d.rect(drawx, drawy, tileWidth, tileHeight);
                    g2d.stroke();
                }
            }
            for(var i = 0; i < bases.length; i++){
                var position = bases[i]["position"].split(":");
                var x = parseInt(position[0]);
                var y = parseInt(position[1]);
                g2d.drawImage(images["image1"], x * tileWidth + posx, y * tileHeight + posy); 
            }
在fillText()内容之后突出。 结果是令人遗憾的:

它落后了,而且似乎东西没有清理干净。 上面是什么? 有人知道如何解决这个问题吗

谢谢大家!

打开这个:

g2d.rect(drawx, drawy, tileWidth, tileHeight);
g2d.stroke();
进入:

而且您不会有路径问题(以牺牲一点性能为代价)。或者,在开始循环之前使用
beginPath()

原因是rect会添加到路径并累积。每次调用stroke()时,都会重新绘制路径中的所有内容。beginPath()将清除路径,而Strokert()是一种直接光栅化方法,不会添加到路径中

例如:

g2d.beginPath();
for(var i = minx; i < maxx; i++){
    for(var j = miny; j < maxy; j++){
        var drawx = i * tileWidth + posx;
        var drawy = j * tileHeight + posy;
        g2d.drawImage(images["image0"], drawx, drawy);
        g2d.fillText("x: " + i, drawx + 3, drawy + 10);
        g2d.fillText("y: " + j, drawx + 3, drawy + 20);
        g2d.rect(drawx, drawy, tileWidth, tileHeight);
    }
}
g2d.stroke();
g2d.beginPath();
对于(var i=minx;i
转动此按钮:

g2d.rect(drawx, drawy, tileWidth, tileHeight);
g2d.stroke();
进入:

而且您不会有路径问题(以牺牲一点性能为代价)。或者,在开始循环之前使用
beginPath()

原因是rect会添加到路径并累积。每次调用stroke()时,都会重新绘制路径中的所有内容。beginPath()将清除路径,而Strokert()是一种直接光栅化方法,不会添加到路径中

例如:

g2d.beginPath();
for(var i = minx; i < maxx; i++){
    for(var j = miny; j < maxy; j++){
        var drawx = i * tileWidth + posx;
        var drawy = j * tileHeight + posy;
        g2d.drawImage(images["image0"], drawx, drawy);
        g2d.fillText("x: " + i, drawx + 3, drawy + 10);
        g2d.fillText("y: " + j, drawx + 3, drawy + 20);
        g2d.rect(drawx, drawy, tileWidth, tileHeight);
    }
}
g2d.stroke();
g2d.beginPath();
对于(var i=minx;i
hm,我试试这个。这两件事的区别在哪里?是的,它非常滞后。我不能用网格拖动地图,因为它是用网格运行的≈1.fps?是的,它很有效,thx非常加密和视觉。!但是为什么呢?区别在哪里?啊,好的。非常感谢。有没有类似于api的东西,人们可以阅读类似的东西?@T_01规范中有很多细节:但当然,它针对的是浏览器实现者,因此并非所有内容都与我们用户相关。嗯,我会试试这个。这两件事的区别在哪里?是的,它非常滞后。我不能用网格拖动地图,因为它是用网格运行的≈1.fps?是的,它很有效,thx非常加密和视觉。!但是为什么呢?区别在哪里?啊,好的。非常感谢。有没有类似于api的东西,人们可以阅读类似的东西?@T_01规范中有很多细节:但当然,它针对的是浏览器实现者,因此并非所有内容都与我们用户相关。