as3 tween运行时错误

时间:2014-05-27 18:19:04

标签: class debugging runtime tween

问候者探索,=)

我已经在这一段时间了很长一段时间,并且悲伤地遇到了我的比赛。为了简洁,生病很快。我有一个文档类,它运行一个计时器,并以编程方式加载一个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

非常感谢任何帮助。非常感谢你。

1 个答案:

答案 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/