【问题标题】:Previous shape dissappears after adding new one - KineticJS添加新形状后,以前的形状消失了 - KineticJS
【发布时间】:2012-03-14 08:24:36
【问题描述】:

我有我的 document.ready 函数,我在其中创建了几个层,包括我的linesLayer,就像这样(和我的舞台):

var pointsLayer = new Kinetic.Layer();
var linesLayer = new Kinetic.Layer();
var stage = new Kinetic.Stage("container", 578, 325);

在我的 document.ready 函数中,我的画布有一个点击函数,在这里我创建了一个新的圆圈(例如,它代表屏幕上的一个点/点),如下所示:

var circle = new Kinetic.Circle({
    name: "x"+x+"y"+y,
    x: x,
    y: y,
    radius: 5,
    fill: "red",
    stroke: "black",
    strokeWidth: 1
});

然后我创建我的行:

var line = new Kinetic.Shape({
    drawFunc: function(){
        var context = this.getContext();
        context.beginPath();
        context.lineWidth = 1;
        context.strokeStyle = "black";
        context.fillStyle = "red";
        context.moveTo(startPoint.x, startPoint.y);
        context.lineTo(endPoint.x, endPoint.y);
        context.closePath();
        context.fill();
        context.stroke();
    }
});

然后我将它们添加到各自的层:

linesLayer.add(line);
pointsLayer.add(circle);

并将它们添加到舞台:

stage.add(pointsLayer);
stage.add(linesLayer);

现在发生的情况是,当我绘制圆点/圆时,它们都会留在屏幕上,就像我希望它们那样。所以如果我点击 10 次,我就有 10 个点。现在的问题是,这确实画了一条线,但它每次只画一条线,两个点之间的最新线,而不是将所有先前的线留在屏幕上。为什么会发生这种情况,因为我将它们添加到图层中,而不是对线图层中的前几行做任何事情?

所以基本上,它确实将我的圆圈添加到我想要的点图层中,并且保持之前添加的元素不变,但是每当我向线条图层添加一条线时,线条图层的所有先前元素都会消失?

编辑: 用这段代码修复了它,但不确定为什么它会起作用。

            // Create line
            var line = new Kinetic.Shape({
                drawFunc: function(){
                    var context = this.getContext();
                    context.beginPath();
                    context.moveTo(prevPoint.x, prevPoint.y);
                    context.lineTo(x, y);
                    context.closePath();
                    this.fillStroke();
                },
                stroke: "orange",
                name: "x"+x+"y"+y+"nr"+nr_coords,
                strokeWidth: 2
            });

【问题讨论】:

    标签: jquery html kineticjs


    【解决方案1】:

    首先,您在第一篇文章和第二篇文章之间使用了不同的变量。在您的第一篇文章中,您使用的是 startPoint 和 endPoint 对象。在第二篇文章中,您使用的是 prevPoint 对象。我猜这个问题与设置这些变量有关(代码未显示)

    【讨论】:

    • prevPoint 和 startPoint 是相同的,我稍后重命名了变量,因为在整个代码的上下文中它更符合逻辑。我已经直接用 x 和 y 替换了 endPoint.x 和 endPoint.y,因为最后它是我唯一需要该对象的东西,所以它已经过时了,并且与 x 和 y 相同。在所有情况下,它们都是整数。所以这就是为什么我不确定为什么会发生这种行为。感谢您的回答和思考。我看到你是那些伟大的画布教程的作者,也感谢那些! :-)
    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2014-08-29
    • 1970-01-01
    相关资源
    最近更新 更多