一段时间后动画滞后 - Easeljs 缓存
Animation lagging after sometime - Easeljs caching
动画在加载时运行良好,但过一段时间后就会出现延迟。一开始我在 for 循环中创建了新的 drops
变量。使其全球化并没有帮助。 fps
是 40 和 5 particles
。有帮助吗?
function init(){
stage = new createjs.Stage("rain-canvas");
createjs.Ticker.setFPS(fps);
createjs.Ticker.addEventListener("tick", refresh);
}
function refresh(){
for(var i = 0; i < particles; i++){
drops = new createjs.Shape();
xxx = Math.random() * viewportWidth;
yyy = -10 + Math.random() * 10;
drops.graphics.beginFill('#fff').rect(xxx, yyy, 2, 18);
drops.alpha = 0.15 + Math.random() * 0.5;
stage.addChild(drops);
TweenLite.to(drops, 1.25, {y: viewportHeight + 150,
onComplete: function(){
stage.removeChild(drops);
}, ease: Power1.easeNone
});
};
stage.update();
}
在这里查看答案:
您不应该在每一帧中都创建一个新的 Shape
。而是做一次并保存在某个地方并将其添加到舞台上。之后你可以更新图形命令。如果您需要进一步的帮助,请随时 post 一个工作示例(在 jsfiddle 上),我会相应地更新它。
@derz 回答够了,但我想提个建议。
粒子几乎肯定不是形状。拥有数百个形状后,渲染的成本会非常高。缓存可以产生巨大的差异,在你的情况下,你只有一种形状,尽管你每次绘制它的 x/y 不同。
为了简化这个:
- 绘制形状一次(在 0,0 处)并缓存它
- 改为使用位图,并指向缓存的形状
- 每次直接设置x/y
这是一个快速示例:http://jsfiddle.net/r0f04fvt/
缓存形状
var template = new createjs.Shape();
template.graphics.beginFill('#fff').rect(0, 0, 2, 18);
template.cache(0,0,2,18); // Cache it
var drops = new createjs.Bitmap(template cacheCanvas);
您可以做的另一件事(这在粒子引擎中很常见)是汇集您的粒子,而不是不断 destroying/creating 它们。查看对象池以获取更多信息。
动画在加载时运行良好,但过一段时间后就会出现延迟。一开始我在 for 循环中创建了新的 drops
变量。使其全球化并没有帮助。 fps
是 40 和 5 particles
。有帮助吗?
function init(){
stage = new createjs.Stage("rain-canvas");
createjs.Ticker.setFPS(fps);
createjs.Ticker.addEventListener("tick", refresh);
}
function refresh(){
for(var i = 0; i < particles; i++){
drops = new createjs.Shape();
xxx = Math.random() * viewportWidth;
yyy = -10 + Math.random() * 10;
drops.graphics.beginFill('#fff').rect(xxx, yyy, 2, 18);
drops.alpha = 0.15 + Math.random() * 0.5;
stage.addChild(drops);
TweenLite.to(drops, 1.25, {y: viewportHeight + 150,
onComplete: function(){
stage.removeChild(drops);
}, ease: Power1.easeNone
});
};
stage.update();
}
在这里查看答案:
您不应该在每一帧中都创建一个新的 Shape
。而是做一次并保存在某个地方并将其添加到舞台上。之后你可以更新图形命令。如果您需要进一步的帮助,请随时 post 一个工作示例(在 jsfiddle 上),我会相应地更新它。
@derz 回答够了,但我想提个建议。
粒子几乎肯定不是形状。拥有数百个形状后,渲染的成本会非常高。缓存可以产生巨大的差异,在你的情况下,你只有一种形状,尽管你每次绘制它的 x/y 不同。
为了简化这个:
- 绘制形状一次(在 0,0 处)并缓存它
- 改为使用位图,并指向缓存的形状
- 每次直接设置x/y
这是一个快速示例:http://jsfiddle.net/r0f04fvt/
缓存形状
var template = new createjs.Shape();
template.graphics.beginFill('#fff').rect(0, 0, 2, 18);
template.cache(0,0,2,18); // Cache it
var drops = new createjs.Bitmap(template cacheCanvas);
您可以做的另一件事(这在粒子引擎中很常见)是汇集您的粒子,而不是不断 destroying/creating 它们。查看对象池以获取更多信息。