问候者探索,=)
我已经在这一段时间了很长一段时间,并且悲伤地遇到了我的比赛。为了简洁,生病很快。我有一个文档类,它运行一个计时器,并以编程方式加载一个movieclip和一个for循环,将它们叠加在另一个之上。然后动态补间将它们从舞台的一端移动到另一端。这是问题。当我偶尔运行swf时,一两个补间停在中途,我不知道为什么会这样。
文档文件
package {
import flash.display.MovieClip
import flash.events.Event;
import flash.utils.Timer;
import flash.utils.*;
import flash.events.*;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.easing.None;
import fl.transitions.TweenEvent;
public class Game extends MovieClip {
//varibles
public var brickStack1:Array = new Array(1);
public var brickStack2:Array = new Array(1,1);
public var brickStack3:Array = new Array(1,1,1);
public var brickStack4:Array = new Array(1,1,1,1);
public var brickStack5:Array = new Array(1,1,1,1,1);
public var arrayOfBricks:Array = new Array(brickStack1,brickStack2,brickStack3,brickStack4,brickStack5);
public var brickLoader:Timer = new Timer(2000,0);
//public var arrayLength:int = 0;
public var brickStack:int = 0;
public function Game() {
trace("game");
//addEventListener (TimerEvent.TIMER , loop);
brickLoader.addEventListener (TimerEvent.TIMER , loop);
brickLoader.start();
}
function loop(e:TimerEvent):void {
//declare a varible for the for loop with Math.random
brickStack = Math.floor(Math.random() * 5) ;
trace(brickStack);
var arrayLength:int = arrayOfBricks[brickStack].length;
//arrayOfBricks[brickStack];
for(var i:int = 0;i < arrayLength; i++){
//if(arrayOfBricks[brickStack-1][i] == 1) {
var obj:Brick = new Brick();
obj.x = stage.stageWidth + obj.width;
obj.y = (i*40);
addChild(obj);
var brickTween = new Tween( obj,"x", None.easeNone , obj.x,obj.x - (stage.stageWidth + obj.width*2), 4, true);
}
if(obj.x < stage.stageWidth + obj.width*2){
obj.parent.removeChild(obj);
}
}
}
}
砖类
package {
import flash.display. *;
import flash.display.MovieClip;
import flash.events.*;
public class Brick extends MovieClip {
public function Brick(){
}
//function brickTimer(e:TimerEvent): void {
//trace("brickTimer");
}
}
将此代码放在Brick类中,但我不知道如何在其类的源代码中引用Brick
非常感谢任何帮助。非常感谢你。答案 0 :(得分:0)
与您的其他问题相同的解决方案:
当他们被垃圾收集时,Tweens通常会停止。
例如:
var tweenObject:Tween;
brickTween = new Tween( firstTweenParams ); // first tween added
brickTween = new Tween( secondTweenParams ); /* second tween added
and first MARKED for garbage collection (removal)*/
当标记为垃圾收集时,补间将工作一段时间,直到收集(销毁)。它可能会在补间完成作业之前发生
有两种解决方案:
1)您应该存储所有工作补间的数组,以避免出现问题。然后清理从阵列中解决了元素。
2)使用补间库,如:
GTween http://gskinner.com/libraries/gtween/
或
tweenmax http://www.greensock.com/tweenmax/