您的方法可能工作,但它絕對是黑客,因爲你不能指望上下文屬性將被維護,或者他們不會被應用在錯誤的地方。
如果要修補的顯示列表更新的背景下,你可以使用「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