你好,
我正在使用随机颜色渐变补间进行一些测试(将它们用作背景)。在尝试了不同的事情之后,我发现了一个代码here,并稍微将其改为下面的代码,不幸的是,这会产生很多延迟(干扰定时器,因此在同一个类中)。我正在使用GreenSock TweenLite / TweenMax引擎:
package{
//...
public class Main extends MovieClip{
var color1:uint = Math.floor(Math.random()*0xFFFFFF + 1);
var color2:uint = Math.floor(Math.random()*0xFFFFFF + 1);
var colors:Object = {left:color1, right:color2};
var newColor1:uint = Math.floor(Math.random()*0xFFFFFF + 1);
var newColor2:uint = Math.floor(Math.random()*0xFFFFFF + 1);
var newColors:Object = {left:newColor1, right:newColor2};
var mySprite:Sprite = new Sprite();
public function Main() {
mySprite.x = 0;
mySprite.y = 0;
stage.addChildAt(mySprite, 1);
drawGradient();
animateBackground();
//...
}
//...
function drawGradient(){
var m:Matrix = new Matrix();
m.createGradientBox(805, 485, 0, 0, 0);
mySprite.graphics.beginGradientFill(GradientType.LINEAR, [colors.left, colors.right], [1, 1], [0x00, 0xFF], m, SpreadMethod.REFLECT);
mySprite.graphics.drawRoundRect(0,0,805,485, 0);
stage.setChildIndex(mySprite, 1);
}
function animateBackground(){
TweenMax.to(colors, 3, {hexColors:{left:newColor1, right:newColor2}, onUpdate:drawGradient, onComplete:reRandomize});
}
function reRandomize(){
color1 = newColor1;
color2 = newColor2;
newColor1 = Math.floor(Math.random()*0xFFFFFF + 1);
newColor2 = Math.floor(Math.random()*0xFFFFFF + 1);
animateBackground();
}
一切正常,但滞后不断增加。为了让自己成为一个想法,之前36 kB大的swf,只需使用这种颜色就可以达到74 kB。
我想知道是否有更有效的方法来处理这种影响,或者代码中特别滞后的东西。有人知道吗?任何帮助都会很棒,非常感谢。
提前谢谢!
注意:我知道这是几次测试后滞后的原因,禁用了不同的东西,因此过度延迟不太可能来自其他来源。
答案 0 :(得分:0)
您忘记清除mySprite
中的旧图形,因此任何额外的命令都会在该精灵上的图层上生成图层。在绘制另一个渐变之前,请先mySprite.graphics.clear()
调用drawGradient
函数。
function drawGradient(){
var m:Matrix = new Matrix();
m.createGradientBox(805, 485, 0, 0, 0);
mySprite.graphics.clear(); // here
mySprite.graphics.beginGradientFill(GradientType.LINEAR, [colors.left, colors.right], [1, 1], [0x00, 0xFF], m, SpreadMethod.REFLECT);
mySprite.graphics.drawRoundRect(0,0,805,485, 0);
stage.setChildIndex(mySprite, 1);
}