createjs 删除了 canvas 上的所有现有信息?

createjs removed all existing info on canvas?

我正在尝试验证无论如何都会发生这种情况,并且没有办法绕过它。 createjs 使用这种架构对我来说似乎很愚蠢。但我注意到从现有的 canvas 元素创建一个舞台会从 canvas?代码如下:

html:

<canvas id="canvas" width="800" height="400"></canvas>

js:

var canv = document.getElementById("canvas");
var stage = new createjs.Stage(canv);
var ctx = canv.getContext('2d');
ctx.beginPath();
ctx.arc(50,50,10,0,2*Math.PI);
ctx.stroke();
createjs.Ticker.addEventListener("tick", tick);//circle created is overwritten here!!!?! Why createjs!?
//stage.update();
createjs.MotionGuidePlugin.install();

var shape1 = new createjs.Shape();
shape1.graphics.f("#000000").dc(0,0,10);


var path1 = new createjs.Shape();
path1.graphics.beginStroke("#ff0000").mt(0,0).qt(50,100,100,0);

stage.addChild(path1, shape1);

createjs.Tween.get(shape1).to({guide:{ path:[0,0, 50,100, 100,0] }},2000, createjs.Ease.cubicInOut);


function tick(event) {
    stage.update();
}

这是绕不过去的东西吗?在我看来,createjs 不会实际使用未擦除的现有元素,这对我来说似乎很愚蠢。如果不是,那么首先传递一个元素有什么意义,为什么不直接创建一个 canvas 元素,然后给你 ID?无论如何,不​​幸的是,如果事情就是这样,我将不得不去别的地方。很遗憾,因为 createjs 似乎很有用。

CreateJS 使用了保留图形模式,即它存储状态并每次重绘。这是因为 canvas 基本上是一个带有绘图命令的大位图 - 清除舞台是删除先前状态的唯一方法。

好消息!如果您想将 CreateJS 内容与其他内容混合,甚至制作附加绘图效果,有很多方法可以解决这些限制。

第一个很简单,就是设置autoClear。这样可以防止清除,只需要在旧内容上绘制新内容即可。

stage.autoClear = false;

第二个有点难,但非常适合您想要将 CreateJS 内容与其他库或效果混合的情况。您基本上可以使用其他 canvas 作为 CreateJS 中包含的位图的来源:

// Create a child for CreateJS referencing the other canvas
var bmp = new createjs.Bitmap(otherCanvas);

// Add it at the bottom (or top or wherever) in your new CreateJS canvas
stage.addChildAt(bmp, 0);

这是一个很好的方法,因为它可以让您将内容放在任何您想要的地方,单独编辑等等。

如果您有其他情况,这没有涵盖,请告诉我,我可以尝试提出建议!

干杯。