1

amfphpとas3アニメーションをつなぐアプリを作ってみました。amfphpから、'if'ステートメントの変数で並べ替えた配列を受け取ります。その後、互いに配列を含む2つの配列があります。

var Array1:Array = [["http://url.to.swf", "http://url.to.link"], ["",""]...];
var Array2:Array = [["http://url.to.swf", "http://url.to.link"], ... ];

その後、その配列を読み取り、すべてのswfをステージにロードする関数を実行します。

ladujBajkiGorne(Array1);

function ladujBajkiGorne(polkaGorna:Array):void {
    for(var i=0; i<polkaGorna.length; i++) {
        Aktual = polkaGorna[i];
        var mLoader:Loader = new Loader();
        var mRequest:URLRequest = new URLRequest(String(Aktual[0]));
        mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, myfunction = function(e:Event):void { onLoadGorna( e, String(Aktual[1]) ); } );
        mLoader.load(mRequest);
    }
}

それから

function onLoadGorna(e, arg1):void {
   userSwf = e.currentTarget.content;
   userSwf.buttonMode = true;
   userSwf.addEventListener(MouseEvent.CLICK, function(e:MouseEvent) { afterClick(e, arg1 ); });
   booksMC.addChild(userSwf);

   var childName:String = booksMC.getChildAt(childs).name;
   booksMC.getChildByName(childName).x = posX;
   booksMC.getChildByName(childName).y = 0;

   posX += 218;
   childs++;
}

そして最後に

function afterClick(e, arg3) {
   var url:URLRequest = new URLRequest(arg3);
   navigateToURL(url, "_self");
}

問題は、ロードされたすべてのswfのリンクに同じURLがあることです。addEventListenerステートメントのladujBajkiGorne関数では変更されません。私はそれを変更するために多くのオプションを試しましたが、何も機能しません。それを手伝ってくれるチャンスはありますか?よろしくお願いします

4

2 に答える 2

2

問題は、ローダー完了ハンドラーの非同期実行にあります。適切なパラメーターをローダーに渡して、ハンドラーで読み取ることは非常に良いことです。コードを修正して、簡単な解決策を提案します。

function ladujBajkiGorne(polkaGorna:Array):void {
    for(var i=0; i<polkaGorna.length; i++) {
        Aktual = polkaGorna[i];
        var mLoader:Loader = new Loader();
        var mRequest:URLRequest = new URLRequest(Aktual[0]+"?link="+Aktual[1]);
        mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, myfunction = function(e:Event):void { onLoadGorna( e ); } );
        mLoader.load(mRequest);
    }
}

function onLoadGorna(e):void {
   var link:String = e.currentTarget.parameters.link;
   userSwf = e.currentTarget.content;
   userSwf.buttonMode = true;
   userSwf.addEventListener(MouseEvent.CLICK, function(e:MouseEvent) { afterClick(e, link ); });
   booksMC.addChild(userSwf);

   var childName:String = booksMC.getChildAt(childs).name;
   booksMC.getChildByName(childName).x = posX;
   booksMC.getChildByName(childName).y = 0;

   posX += 218;
   childs++;
}

その後、すべてのローダーはそのリンクを認識します。

于 2013-01-16T19:54:11.587 に答える
1

問題は、完了イベントのイベント ハンドラーにあります。イベントハンドラとして新しい関数を返す関数を呼び出します。

まず、次のような関数を作成します。

function getCompleteHandler(url:String):Function {
    return function (e:Event) {
        onLoadGorna(e, url);
    }
}

次に、これを置き換えます。

mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, myfunction = function(e:Event):void { onLoadGorna( e, String(Aktual[1]) ); } );

これで:

mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, getCompleteHandler(Aktual[1]) );

それは今うまくいくはずです!!

于 2013-01-16T14:44:12.907 に答える