1

ローカル接続で関数を呼び出そうとすると、このエラーが断続的に発生します。

Error #2044: Unhandled StatusEvent:. level=error, code=

「処理された」出力:

LocalConnection.send() failed [StatusEvent type="status" bubbles=false cancelable=false eventPhase=2 code=null level="error"]

情報を送信するコードは次のとおりです。

package facebook 
{
import flash.events.StatusEvent;
import flash.net.LocalConnection;

public class Leaderboard
{
    private var sendLC:LocalConnection = new LocalConnection();
    public var leaderboardScores:Object;
    public static var LB:Leaderboard;

    public function Leaderboard()
    {
        LB = this;
        sendLC.addEventListener(StatusEvent.STATUS, statusError);
    }
    public function showAbilities():void
    {
        var abilityArray:Array = [];
        for each (var o:Object in leaderboardScores)
        {
            var player:Array = [o[0], o[1], o[2], o[3].value];
            abilityArray.push(player);
        }
        abilityArray.sortOn([3], Array.NUMERIC);
        sendLC.send("_myConnection", "showAbilities", abilityArray);
        showDeaths();
    }
    public function showDeaths():void
    {
        var deathArray:Array = [];
        for each (var o:Object in leaderboardScores)
        {
            var player:Array = [o[0], o[1], o[2], o[4].value];
            deathArray.push(player);
        }
        deathArray.sortOn([3], Array.NUMERIC);
        sendLC.send("_myConnection", "showDeaths", deathArray);
        showChallenges();
    }
    public function showChallenges():void
    {
        var challengeArray:Array = [];
        for each (var o:Object in leaderboardScores)
        {
            var player:Array = [o[0], o[1], o[2], o[5].value];
            challengeArray.push(player);
        }
        challengeArray.sortOn([3], Array.NUMERIC);
        sendLC.send("_myConnection", "showChallenges", challengeArray);
        showMoney();
    }
    public function showMoney():void
    {
        var moneyArray:Array = [];
        for each (var o:Object in leaderboardScores)
        {
            var player:Array = [o[0], o[1], o[2], o[6].value];
            moneyArray.push(player);
        }
        moneyArray.sortOn([3], Array.NUMERIC);
        trace("! ! ! ! ! !SENDING MONEY ! ! ! ! ! !");
        sendLC.send("_myConnection", "showMoney", moneyArray);
        showBuffs();
    }
    public function showBuffs():void
    {
        var buffArray:Array = [];
        for each (var o:Object in leaderboardScores)
        {
            var player:Array = [o[0], o[1], o[2], o[7].value];
            buffArray.push(player);
        }
        buffArray.sortOn([3], Array.NUMERIC);
        sendLC.send("_myConnection", "showBuffs", buffArray);
        showKills();
    }
    public function showKills():void
    {
        var killArray:Array = [];
        for each (var o:Object in leaderboardScores)
        {
            var player:Array = [o[0], o[1], o[2], o[8].value];
            killArray.push(player);
        }
        killArray.sortOn([3], Array.NUMERIC);
        sendLC.send("_myConnection", "showKills", killArray);
    }
    private function statusError(e:StatusEvent):void
    {
        switch (e.level) {
            case "status":
                trace( "LocalConnection.send() succeeded");
                break;
            case "error":
                trace( "LocalConnection.send() failed " +e);
                break;
        }
    }
}
}

そして、ここに受信コードがあります:

package 
{
import flash.display.Bitmap;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.net.LocalConnection;
import flash.events.Event;

public class Main extends Sprite
{
    [Embed(source='../assets/leaderboardOutline.png')]
    private var outlineClass:Class;

    private var receiverLC:LocalConnection = new LocalConnection()
    private var background:Bitmap = new outlineClass;

    public function Main():void 
    {
        receiverLC.client = this;
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        try 
        {
            this.receiverLC.allowDomain('*')
            this.receiverLC.connect("_myConnection");
            trace('!~~~~~LocalConnection SUCCEEDED');
        } 
        catch (error:ArgumentError) 
        {
            trace('!~~~~~~LocalConnection FAILURE');
        }
        addChild(background);
    }
    public function showAbilities(scores:Array):void
    {
        trace("ABILITIES\n");
        try{
            for each (var a:Array in scores)
                trace("NAME: " + a[1] + " SCORE: " + a[3]);
        }
        catch (e:Error)
        {
            trace("Error " + e);
        }
    }
    public function showDeaths(scores:Array):void
    {
        trace("DEATHS\n");
        try{
            for each (var a:Array in scores)
                trace("NAME: " + a[1] + " SCORE: " + a[3]);
        }
        catch (e:Error)
        {
            trace("Error " + e);
        }
    }
    public function showChallenges(scores:Array):void
    {
        trace("CHALLENGES\n");
        try{
            for each (var a:Array in scores)
                trace("NAME: " + a[1] + " SCORE: " + a[3]);
        }
        catch (e:Error)
        {
            trace("Error " + e);
        }
    }
    public function showMoney(scores:Array):void
    {
        trace("MONEY\n");
        try{
            for each (var a:Array in scores)
                trace("NAME: " + a[1] + " SCORE: " + a[3]);
        }
        catch (e:Error)
        {
            trace("Error " + e);
        }
    }
    public function showBuffs(scores:Array):void
    {
        trace("BUFFS\n");
        try{
            for each (var a:Array in scores)
                trace("NAME: " + a[1] + " SCORE: " + a[3]);
        }
        catch (e:Error)
        {
            trace("Error " + e);
        }
    }
    public function showKills(scores:Array):void
    {
        trace("KILLS\n");
        try{
            for each (var a:Array in scores)
                trace("NAME: " + a[1] + " SCORE: " + a[3]);
        }
        catch (e:Error)
        {
            trace("Error " + e);
        }
    }
}   
 }

エラーに対して行った検索はほとんど価値がないようです。ほとんどの人は、関数の外でlocalconnectionを宣言すると、それが修正されたと言います。誰かがこのエラーを引き起こす可能性のあるものを見ることができますか?

4

2 に答える 2

1

問題になる可能性のあることがいくつかわかります。

最初は、送信者を受信者の前にロードする必要があるように設定したフローです。レシーバーは try/catch でラップされていないため、実際に接続されているかどうかはわかりません。

private function connect( ):void{
  try {
    this.receiverLC.allowDomain('*')
    this.receiverLC.connect("_myConnection");
    trace('LocalConnection SUCCEEDED')
  } catch (error:ArgumentError) {
    trace('LocalConnection FAILURE')
  }
}

次に、ステータスイベントが不十分であることです。

private function statusError(e:StatusEvent):void {
  switch (e.level) {
    case "status":
      trace( "LocalConnection.send() succeeded");
      break;
    case "error":
      trace( "LocalConnection.send() failed " );
      break;
  }
}

そして最後に、送信者が他の SWF の準備ができていることを認識できるように、SWFS のクロストークをやり取りする必要があります。



[編集]
次の関数では o[4] を割り当てていますが、コールバック関数では存在しない o[3] にアクセスしています。

    public function showDeaths():void
    {
        var deathArray:Array = [];
        for each (var o:Object in leaderboardScores)
        {

// here is one problem o[4] in showDeaths you are looking for 3
            var player:Array = [o[0], o[1], o[2], o[4].value];
            deathArray.push(player);
        }
        deathArray.sortOn([3], Array.NUMERIC);
        sendLC.send("_myConnection", "showDeaths", deathArray);
        showChallenges();
    }

最初のコールバックを除くすべてが同じ問題に悩まされています

于 2012-01-18T23:39:15.780 に答える
0

ローカル swf に渡される情報が多すぎます。データをすばやく変更する必要がある場合は、関数ごとに個別の LocalConnections を作成します。

于 2012-01-25T22:30:04.657 に答える