2010-11-04 60 views
0

我创建了一个包含舞台上所有影片剪辑的类。这些变量指的是舞台上的实例名称。只要我将所有的功能都保存在一个类中,一切似乎都很好。但是,当我尝试使用另一个类来管理影片剪辑的属性时,我遇到了资源清理问题。(Actionscript 2.0)将MovieClip传递给外部脚本。如何清理

//File (MainScreen.as) 
import utils.Container; 

class MainScreen extends MovieClip 
{ 
    private var clip1:MovieClip; 
    private var clip2:MovieClip; 
    private var container:Container 

    public function MainScreen() 
    { 
     container = new Container(clip1); 
    } 

    public function CleanUpMess() 
    { 
     container.CleanUpMess(); // <-- This part seems fine 

     //? <-- Should I be calling other things here? 
    } 
} 

我相信这是关系到下面mClip中所示的分配=夹子我想通过引用传递这部电影由容器类使用,但我相信垃圾收集越来越迷茫的时候有两个引用到相同的影片剪辑。有没有一种方法可以使它不再需要这个参考。

//File (Container.as) 
class utils.Container 
{ 
    private var mClip:MovieClip; 
    public function Container(clip:MovieClip) 
    { 
     mClip = clip; 
    } 

    public function CleanUpMess() 
    { 
     mClip.removeMovieClip(); // <--- Doesn't seem to work 
     removeMovieClip(mClip); // <--- Doesn't seem to work 
    } 
} 

我发现MovieClip.removeMovieClip()的ActionScript 2.0中文件中,但我觉得我用它不正确,或者说,它并不适用于我的情况。

回答

0

如果要调用container.CleanUpMess();你不需要设置任何东西在类,除非它是不是在类文件中CleanUpMess()函数中。 CleanUpMess()方法在类中,因此可以访问传递给构造方法的动画片段。你应该能够在类文件中调用影片剪辑变量并从那里改变它的属性。

例如:

public function CleanUpMess() 
{ 
mClip.x = 10; 
mClip.y = 30; 
} 

有何帮助呢?

+0

我想我的问题可能有点混乱,我会更新它。然而,这部分内容很有意思......“你可能会遇到一些问题,那些没有附加到舞台上的课程不能识别舞台,也不能从该课堂上的舞台上移除物品。”是否需要在舞台上附加外部类来调用清理功能? – Lockyer 2010-11-04 05:26:22

+0

是的,你可以删除在MainScreen.as中创建的对象实例,但由于MainScreen是我假设的与舞台直接接触的一个文档类,因此可以从那里引用舞台。对不起,如果我误解了你的问题,我会尽力帮助你,当你更新它 – Kobby 2010-11-04 05:40:46

+0

不,对不起。我相信我遇到的麻烦是当MainScreen终止时MovieClip的实例留在内存中。我理解面向对象编程的原理,我对动作特定的内存分配和清理感到困惑。 – Lockyer 2010-11-04 16:24:06