您的方法可能工作,但它绝对是黑客,因为你不能指望上下文属性将被维护,或者他们不会被应用在错误的地方。
如果要修补的显示列表更新的背景下,你可以使用“drawstart”事件,该事件触发绘制之前显示列表:
stage.on("drawstart", function(e) {
var ctx = stage.canvas.getContext("2d");
ctx.miterLimit = 2;
});
但是,如果你想有一个更好的方法这是特定于实例的,您可以扩展Text类以追加任何所需的上下文属性。下面是一个简单的例子,其中miterLimit
存储和应用任何时候绘制文本。在这个例子中,您可以创建多个实例并为它们设置不同的尖角限制。请注意,您可能还需要支持其他属性,例如lineJoin。
http://jsfiddle.net/cr4hmgqp/2/
(function() {
"use strict"
function MiterText(text, font, color, miterLimit) {
this.Text_constructor(text,font,color);
this.miterLimit = miterLimit;
};
var p = createjs.extend(MiterText, createjs.Text);
p.draw = function(ctx, ignoreCache) {
ctx.miterLimit = this.miterLimit;
if (this.Text_draw(ctx, ignoreCache)) { return true; }
return true;
};
p.clone = function() {
return this._cloneProps(new MiterText(this.text, this.font, this.color, this.miterLimit));
};
createjs.MiterText = createjs.promote(MiterText, "Text");
}());
请注意,这个问题应该有希望被固定在EaselJS的下一个版本。这里是跟踪的问题:https://github.com/CreateJS/EaselJS/issues/781
干杯。
搭配'resize'是合适和直接的。如果您的画布内容是静态的,只需创建第二个内存画布并将静态内容保存到第二个画布上。在调整大小时,将第二个画布'drawImage'放到第一个画布上 - 可选择缩放。如果您的内容不是静态的,则必须使用绘图命令重新渲染内容或使用第二个画布创意。不要在不断重复的“tick”处理程序中重绘,因为如果内容自上次打勾后未发生更改,则可能会重新进行不必要的重绘。 – markE