2016-10-15 17 views
0

私はAS3のプロジェクトに取り組んできましたが、私はさらに別の動きがありました。ActionScript 3&ランタイムリソース

背景:これはターンベースのゲームです。私は過去1週間それを最適化していましたが、今はバターのように動いています(一貫して!)。

問題:ただし、保存されたゲームから継続して再生しようとすると、一貫性が低下します。具体的には、最初の数回は正常に動作し、コンピュータがフリーズするまでパフォーマンスが大幅に低下します。これは戦闘中にのみ発生し、メニューや他の時間には発生しません。

Actionscriptに関連する問題がありますか?私はビルトインのSharedObjectクラスを使ってクッキーでゲームを保存しています。データを保存およびロードするために使用しているコードは次のとおりです(バイト配列クラスも使用しています)。

public static function saveGame():void 
{ 
    /// save the game using byte array 
    registerClassAlias("Mob", Mob); 
    registerClassAlias("Skill", Skill); 
    var ba:ByteArray = new ByteArray(); 
    var savedData:* = Main.glblPlayer.setSaveObject(); 
    ba.writeObject(savedData); 
    ba.position = 0; 
    so.data.game5 = ba; 
    so.flush(); 
} 

public static function loadGame():Boolean 
{ 
    if (so.data.hasOwnProperty("game5")) 
    { 
     var ba:ByteArray = new ByteArray(); 
     ba = so.data.game5; 
     ba.position = 0; 
     var loadedData:Object = ba.readObject(); 
     glblPlayer.loadSaveObject(loadedData); 

     return true; 
    } 
    else 
    { 
     so.data.game = new Object(); 
     return false; 
    } 
} 

私はちょうど上記のコードをチェックし、いくつかのバリエーションでそれをもう少しテストしました。 1から3回ロードされても、それは問題ありませんが、それ以降は戦闘ごとにパフォーマンスが低下します。私は、ActionScriptの技術的な仕組みがどのように機能しているのか、それがクッキーであることを除いてどのようにリソースを節約し、キャッシュに保存しているのか、考えていません。

誰でもフラッシュゲームでのセーブ/ロードの方法をAS3でどのように行っているのでしょうか?または、「sharedObjectを使用する」ことはありますか?

答えて

1

プロファイラー(Adobeスカウトなど)を使用して問題の原因を調べます。

推測しなければならないのは、(デ)シリアライゼーションルーチンが正しく動作せず、メモリリークがあるからです。しかし、これについてもう一度論じたり、何が問題かと疑問視するコードを見るのは無意味な試みです。プロファイラを使用して、問題の内容を正確に確認します。

+0

私はこれが存在したことさえ知りませんでした、ありがとう。 –

+0

だから、私はそれを実行し、 "その他のオーバーヘッド"が処理能力の膨大な量を占め、フレームレートを劇的に低下させると言いました。そんなことを聞​​いたことがありますか?または、どのオーバヘッドを想定していますか? –

+0

@Naomi Dennisいいえ、申し訳ありません。これは良いフォローアップの質問かもしれません。あるいは、アドビフォーラムで役立つものを見つけることができます:https://forums.adobe.com/thread/1114767 – null