1

次のコードは、非常に単純なスライド ショーに関するものです。クリックした後、画像(またはswf)を表示し、同時に他の画像を非表示にしたい...これは私のコードであり、正常に動作しますが、btn3ではクリックすると2番目の画像が消えません..どうしてか分かりません。私のコードを十分に書き直すための新しい方法を教えてもらえますか?

    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);


    }
4

1 に答える 1

3

問題がより明確になるため、コードをよりきれいにフォーマットすることに取り組む必要があります。次の行で:

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

}}

2 番目の画像をチェックするコードが実行されていません。コードを再構築すると、その理由がわかります。

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);
}

両方のチェックが実行されるようにします。コードの残りの部分についても同じことが言えます。チェックが逆の場合、他のボタンでも同じ問題が発生します。

コードを読みやすくするためにさまざまなものをどのようにフォーマットできるかを確認するためにコーディングするときに参照できる良い参考資料は次のとおりです

于 2012-11-02T15:00:22.710 に答える