Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.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 将画布划分为独立的空间_Javascript_Html_Canvas - Fatal编程技术网

Javascript 将画布划分为独立的空间

Javascript 将画布划分为独立的空间,javascript,html,canvas,Javascript,Html,Canvas,有没有一种方法可以将画布标记分隔成几个独立的空间,这样就可以为每个空间获得独立的2d上下文和独立的坐标。 例如,如果我想两次绘制同一幅画,我可以将画布分成相等的部分,并在每个部分中使用相同的函数。我认为在单个画布中用数学方法创建独立的上下文并不困难。例如,假设您有一个1000 x 500的画布,您希望将其分成两个并排的500 x 500区域。让您的所有函数调用都使用一个面积参数,然后使用一个简单的计算来调整x坐标,具体取决于您使用的面积。大概是这样的: function drawLine(fro

有没有一种方法可以将画布标记分隔成几个独立的空间,这样就可以为每个空间获得独立的2d上下文和独立的坐标。
例如,如果我想两次绘制同一幅画,我可以将画布分成相等的部分,并在每个部分中使用相同的函数。

我认为在单个画布中用数学方法创建独立的上下文并不困难。例如,假设您有一个1000 x 500的画布,您希望将其分成两个并排的500 x 500区域。让您的所有函数调用都使用一个面积参数,然后使用一个简单的计算来调整x坐标,具体取决于您使用的面积。大概是这样的:

function drawLine(fromX, fromY, toX, toY, area) {
    var startX = fromX + (area * 500);
    var startY = fromY;
    var endX = fromX + (area * 500);
    var endY = fromY;
    // draw your line here
}

在这种情况下,当使用左侧区域时,您将对右侧框使用area=0和area=1。

我认为在单个画布中以数学方式创建独立上下文并不困难。例如,假设您有一个1000 x 500的画布,您希望将其分成两个并排的500 x 500区域。让您的所有函数调用都使用一个面积参数,然后使用一个简单的计算来调整x坐标,具体取决于您使用的面积。大概是这样的:

function drawLine(fromX, fromY, toX, toY, area) {
    var startX = fromX + (area * 500);
    var startY = fromY;
    var endX = fromX + (area * 500);
    var endY = fromY;
    // draw your line here
}

在这种情况下,当使用左侧区域时,您将使用area=0和area=1作为右侧框。

我使用peachykeen的建议,创建了两个屏幕外画布,然后将它们作为图像放置在原始画布中,代码如下所示:

canvas1 = document.createElement("canvas");
canvas2 = document.createElement("canvas");

//Draw on the canvases

Drawing code

//Add them to the original canvas

if (OriginalCanvas && OriginalCanvas.getContext) {
    var context = OriginalCanvas.getContext('2d');
    if (context) {
        context.drawImage(canvas1, 0, 0, OriginalCanvas.width / 2, OriginalCanvas.height);
        context.drawImage(canvas2, OriginalCanvas.width / 2, 0, OriginalCanvas.width / 2, OriginalCanvas.height);
    }
}

我使用peachykeen的建议,创建了两个屏幕外画布,然后将它们作为图像放置在原始画布中,代码如下所示:

canvas1 = document.createElement("canvas");
canvas2 = document.createElement("canvas");

//Draw on the canvases

Drawing code

//Add them to the original canvas

if (OriginalCanvas && OriginalCanvas.getContext) {
    var context = OriginalCanvas.getContext('2d');
    if (context) {
        context.drawImage(canvas1, 0, 0, OriginalCanvas.width / 2, OriginalCanvas.height);
        context.drawImage(canvas2, OriginalCanvas.width / 2, 0, OriginalCanvas.width / 2, OriginalCanvas.height);
    }
}

我不能控制html,只能控制javascript部分,因此我不能有两个canvaseDocument.createElementcanvas;您可以使用Javascript创建一个新画布。不更改可见HTML的最佳解决方案是创建两个或多个屏幕外画布,并将其用作中间纹理。对其中一个或多个执行所有绘制,然后将其绘制到可见画布。这也允许你将图像平铺到一个屏幕外的画布上,然后多次绘制到可见的画布上。有关更多信息,请参阅。我无法控制html,只能控制javascript部分,因此我不能有两个画布Document.createElementcanvas;您可以使用Javascript创建一个新画布。不更改可见HTML的最佳解决方案是创建两个或多个屏幕外画布,并将其用作中间纹理。对其中一个或多个执行所有绘制,然后将其绘制到可见画布。这也允许你将图像平铺到一个屏幕外的画布上,然后多次绘制到可见的画布上。有关更多信息,请参阅。对于非常简单的应用程序,这确实有效。然而,当您介绍在提供原始坐标笔划、缩放、变换之外发生的任何事情时,您会遇到问题。画布不会阻止您在一个部分之外绘制。使用中间曲面确实可以,但性能略有下降。对于非常简单的应用程序,这是可行的。然而,当您介绍在提供原始坐标笔划、缩放、变换之外发生的任何事情时,您会遇到问题。画布不会阻止您在一个部分之外绘制。使用中间曲面会导致性能下降。