我正在使用EaselJS編程一個HTML5 2D「遊戲」,它看起來像一個行星/重力模擬器,我決定用一條線跟蹤地球的運動/軌道,隨着每個行星移動。這裏有一個快速GIF演示:繪製多條任意線條過於昂貴EaselJS
的問題是:如果我在每創建一個線勾出畫布去完全慢(因爲它是在每一個節拍,這是昂貴的抽籤線),所以我將昂貴的代碼移動到setInterval
,循環之間間隔爲250毫秒,問題依然存在,因爲當有許多形狀時,它會在每個循環中創建大量行。另外,如果我只是在每個循環之間添加更多時間,結果將開始看起來...... Minecraft-ish。
我沒有就如何解決,因爲一切這個問題,我能想到的將包括在每個循環創建大量的行的想法。我嘗試過使用緩存,但是緩存這些細小的線條只是導致它們在最終的緩存圖像中消失,並且由於問題不在於更新線條,而是創建新線條,因此我認爲緩存對我無能爲力。
下面是相關代碼:
setInterval(function() {
allObjs.forEach(function(obj1) {
if (typeof obj1.xpast !== "undefined" || typeof obj1.ypast !== "undefined") {
var trail = new createjs.Shape();
trail.graphics.s("#fff").ss(1, "round").moveTo(obj1.xpast + .5, obj1.ypast + .5).lineTo(obj1.x + .5, obj1.y + .5);
trail.alpha = 0.25;
stage.addChild(trail);
setTimeout(function() {
createjs.Tween.get(trail).to({
alpha: 0
}, 1000).call(function() {
stage.removeChild(trail);
});
}, 10000);
}
obj1.xpast = obj1.x;
obj1.ypast = obj1.y;
});
}, 750);
不幸的是,我不能把我的代碼中的jsfiddle的時刻。
我不知道我可以使用「source-overlay」複合操作之前將新的矢量添加到同一個緩存中。謝謝,蘭尼。 :) – 2014-09-03 19:37:04
Lanny,我應該清除我緩存的每個向量的圖形指令嗎? – 2014-09-04 13:10:21
每當您將它繪製到緩存中時清除圖形。否則,它會再次透支這些指示。 – Lanny 2014-09-04 15:10:25