flash AS3中的addChild和removeChild(动作脚本3)

时间:2012-11-02 14:48:51

标签: actionscript-3 removechild addchild

接下来的代码是一个非常简单的幻灯片放映。点击后,我想显示一张图片(或swf),同时让其他人消失...... 这是我的代码,它工作正常,但在btn3,当我点击,第二张图片不会消失.. 我不知道为什么。你能学习一些新的方法来充分重写我的代码吗?

    import flash.display.Loader;
    import flash.events.Event;


    var my_first_swf_loading_ever:Loader=new Loader();
    my_first_swf_loading_ever.load(new URLRequest('1.jpg'));
    var my_second_pic:Loader=new Loader();
    my_second_pic.load(new URLRequest('2.jpg'));
    var my_3_pic:Loader=new Loader();
    my_3_pic.load(new URLRequest('pictures/3.jpg'));

    btn.addEventListener(MouseEvent.CLICK, clicked);

    function clicked(evt:Event):void
    {

    if (contains(my_second_pic)) {
        removeChild(my_second_pic);
        if (contains(my_3_pic)) {
            removeChild(my_3_pic);
        }
    }
    my_first_swf_loading_ever.x=120;
    my_first_swf_loading_ever.y=120;
    addChild(my_first_swf_loading_ever);

    }


    btn2.addEventListener(MouseEvent.CLICK, clicked2);
    function clicked2(evt:Event):void
    {
        if (contains(my_first_swf_loading_ever)) {
            removeChild(my_first_swf_loading_ever);

            if (contains(my_3_pic)) {
                removeChild(my_3_pic);
            }
        }
        my_second_pic.x=120;
        my_second_pic.y=120;
        addChild(my_second_pic);

    }

    btn3.addEventListener(MouseEvent.CLICK, clicked3);
    function clicked3(evt:Event):void
    {
        if (contains(my_first_swf_loading_ever)) {
            removeChild(my_first_swf_loading_ever);
            if (contains(my_second_pic)) {
                removeChild(my_second_pic);

            }
        }
        my_3_pic.x=120;
        my_3_pic.y=120;
        addChild(my_3_pic);


    }

1 个答案:

答案 0 :(得分:3)

您应该将代码格式化为更整洁,因为问题会更加清晰。在以下几行中:

if (contains(my_first_swf_loading_ever)) {
        removeChild(my_first_swf_loading_ever);
    if (contains(my_second_pic)) {
        removeChild(my_second_pic);

}}

检查第二张图片的代码没有执行,如果重构代码,你可以看到原因:

if (contains(my_first_swf_loading_ever)) // First check
{
    removeChild(my_first_swf_loading_ever);
    if (contains(my_second_pic)) // Second check is only reached if first check returns true
    {
        removeChild(my_second_pic);
    }
}

重组为:

if (contains(my_first_swf_loading_ever))     // First check
{
    removeChild(my_first_swf_loading_ever);
}
if (contains(my_second_pic))                 // Second check - not reliant on first
{
    removeChild(my_second_pic);
}

这样就可以进行两项检查。对于其余代码也是如此,如果检查是相反的话,你会在其他按钮上遇到同样的问题。

以下是一个很好的参考资料,您可以在编码时了解如何格式化不同的内容以帮助您提高代码的可读性:http://techwiki.openstructs.org/index.php/AS3_Coding_Standards#Function_Declarations