createjs优化画布重绘

时间:2016-09-28 19:48:08

标签: canvas createjs tweenjs

据我了解,我有两种控制画布重绘的方法,因此当没有任何动画时,它们不会简单地运行。

设置检查条件的函数:

createjs.Ticker.addEventListener("tick", tick);
var redrawOn = false;
function tick(event) {
    if (redrawOn) {
        stage.update(event);
    }
}

或者,侦听补间对象的“更改”事件并重新绘制该事件的阶段:

var myTween = createjs.Tween.get(resetButton).to({'alpha': 1}, 500);
myTween.on('change', function(){
    stage.update();
});

它们看起来都很乏味但第二个似乎更容易。比另一个更有效率吗?如果第二个是,有没有办法简单地扩展Tween类,只是总是这样做?为什么不会出现这种情况?

编辑:基本上我试图避免这样做:

createjs.Ticker.addEventListener("tick", stage);

因为我读错了。所以,我有几个应用程序使用这个,现在我试图在打勾期间打开和关闭重绘,它变成了一个真正的混乱...由于交互性,一些功能正在改变滴答 - >重绘而其他动画尚未完成。这是一场噩梦。

1 个答案:

答案 0 :(得分:2)

如果你有一个补间,那么当它改变时更新阶段是有道理的,但是如果你有多个补间,那么你最终将得到额外的更新,这是不必要的。

组合两种方法可能有意义,并在补间更改中将redrawOn设置为true,然后在设置此值时更新阶段。

喜爱 据我了解,我有两种控制画布重绘的方法,因此当没有任何动画时它们不会一直运行。

设置检查条件的函数:

createjs.Ticker.addEventListener("tick", tick);
var redrawOn = false;
function tick(event) {
    if (redrawOn) {
        stage.update(event);
    }
    redrawOn = false;
}

var myTween = createjs.Tween.get(resetButton).to({'alpha': 1}, 500);
myTween.on('change', function(){
    redrawOn = true;
});

关于一般阶段的自动收报机,它可能不好,但本身并不坏。如果您的应用程序发生了很大变化,或者复杂性很高,那么更新舞台一次每个刻度都是有意义的。有更好的方法来优化您的应用程序,而不是删除阶段滴答。例如,使用SpriteSheets缓存复杂内容,降低图形复杂性等。

希望有所帮助。