替换movieclip

时间:2014-03-14 04:00:09

标签: actionscript-3

我目前正致力于将我的as2游戏项目之一转换为as3(flash pro cs4)。但背景动画片段存在问题。

我有一个名为disposemc的函数:

function disposemc(mcname:MovieClip):void{
    mcname.parent.removeChild(mcname);
    mcname = null
}

另一个名为changelayer的函数:

function changelayer(mcname:MovieClip,layer:MovieClip):void{
    layer.addChild(mcname)
}

因此,在主时间轴第2帧中,我在舞台上放置了一个movieclip(放置在IDE中),实例名称为“bg_mc”,然后在主时间轴第3帧上,我在舞台上有一个不同的mc,SAME实例名称为“bg_mc”。这样做的目的是用新的bg_mc替换旧的bg_mc。

问题是,

在第2帧中,我将更改层函数应用于bg_mc并通过addChild将其移动到root的子mc中,然后应用我的CPU映像后处理框架的函数并将bg_mc添加到数组中。

发生了一些事情后,我将nextFrame转到第3帧,发现新的bg_mc没有替换旧的bg_mc,而是重叠了。 所以我在离开第2帧时尝试使用disposemc函数来摆脱旧的bg_mc,在第3帧我将changelayer应用到bg_mc并将bg_mc添加到我的渲染数组中。

我发现旧的bg_mc不在舞台上但它仍然渲染到我的位图数据上,意味着它没有像它假设在disposemc函数中那样无效。并且因为名称重叠而难以访问它。当我在第3帧中调用bg_mc时它是新的,但旧的仍然存在,并且从渲染的位图数据中可以看到它仍在播放。 将旧的mc停在disposemc函数中会有帮助吗?

任何人都可以提供任何帮助吗?如果我的制作bg的结构很糟糕,有没有其他方法来覆盖库中不同mc的实例?

1 个答案:

答案 0 :(得分:0)

  

这样做的目的是用新的替换旧的bg_mc

您使用MovieClip和框架。因此,请按设计使用关键帧。如果您需要在第三帧中放置不同的背景,请不要编程,放置它。如果您想要程序,请不要将带有关键帧的MovieClip用作主导航仪器。

可以使用非常简单的逻辑和几个只有一帧的影片剪辑轻松交换主时间轴

//Some MovieClips from the library, with only one frame, still designed in Flash IDE
var currentScene:DisplayObject;
var home: MyHove = new MyHove()
var intro:MyIntro = new MyIntro();

navigate(home);
//after some interaction from the user, go to another page        
navigate(intro);

//It will work like gotoAndStop... but better, and give you more control
function navigate(scene: DisplayObject):void{
    if(currentScene != null){
        removeChild(currentScene);
    }

    currentScene = scene;

    if(currentScene != null){
        addChild(currentScene);
        //apply logic for swapping background
    }
}