2

初心者プログラマーはこちら。

私は現在、タイトル画面とメインのゲームループを別々の「キーフレーム」(これは CS6 にあります) で単純なゲームをコーディングしています。タイトル画面からゲームのキーフレームに移行すると、ボタン/ムービークリップ/変数がくっついてメモリを浪費し、画面が乱雑になるのではないかと心配しています。

変数/関数を「プライベート」に設定すると、ガベージコレクターがそれらを処理するのに役立ちますか? 「画面をクリア」して、無駄な/メモリをリークしていないことを確認するにはどうすればよいですか?

AS3 を学ぶために私が読んだチュートリアルや本は、このトピックを実際にカバーしていません。AS3 でのメモリ管理のベストプラクティスに関する限り、私が見逃した良いガイドや明らかなヒントがあれば、それらを見ることに興味があります。 . これまでに学んだ唯一のことは、すべてのイベント リスナーを手動で弱参照に設定する必要があるということです。

おまけの質問: 私はフルスクリーンのビットマップを使用しており、ディスプレイ用にそれをブリットしています。フレームごとに画面に多数のオブジェクトをブリットしている場合、ブリットされた「スプライト」が「隠蔽」されていることを心配する必要はありませんか? ビットマップが 1 ピクセルの厚さであり、物を積み重ねるだけではないことを願っています。

4

1 に答える 1

2

まず、リソースを完全に制御する唯一の方法は、意図された目的のためにタイムラインを離れ、アセットを作成して swc または swf 形式でエクスポートすることです。前者を埋め込み、後者を埋め込みまたはロードすることができます。 .

あなたがしなければならないことは、Document クラス (CS6 を使用しているため) から始めて、タスクを定義した一連のクラスを使用してゲームを構築する、オブジェクト指向の方法で開発する方法を学ぶことです。クラスを使用すると、ゲーム全体での再利用が促進されます。複雑さに応じて、PureMVC やロボットの脚などのフレームワークを検討します。

フラッシュでのガベージ コレクションはマーク アンド スイープです。つまり、すべてのオブジェクトを逆参照する必要があります。通常は、関連するリスナー、タイマー、およびそれらへの参照をすべて削除することから始めます。配列またはオブジェクトのハッシュからのクリア。最後に、問題のオブジェクトを null に設定します。これにより、ガベージ コレクションに「適格」になりますが、実際には保証されません。フラッシュが来て、必要に応じてクリーンアップします。

個人的には、Flash Builder を手に入れることができれば、これには素晴らしいメモリ管理プロファイリング ツールがあります。上記の OOP を使用して開発している場合、このツールを使用して、ゲームに存在するすべてのインスタンスを確認できます。ここでの良い点は、時間内にメモリ スナップショットを作成し、それらを比較して、残り、メモリ リークの原因となっているオブジェクトを確認できることです。スナップショットのキャプチャの間に呼び出す必要があるガベージ コレクション ボタンがあります。これは開発中にのみ使用できますが、Adobe AIR を使用すると gc 呼び出しを手動で強制できます。

おまけの質問についてですが、このブリッティングをどのように行っているのかわかりません。ステージにオブジェクトを追加している場合、メモリが増加しているため、これを避けることはできません。厚さ 1px と説明するのは、フラッシュがレンダリングするものです。ステージを右クリックして再描画領域オプションを選択すると、再描画されているものを確認できます。フラッシュが再描画する必要があるものを示す赤いボックスを確認すると、必要なものだけが再描画されます。これは、フレーム レートが低下しているかどうかを確認するのに役立ちます。

要約すると:

アセットの作成には Flash CS6 の使用を検討してください。

Actionscript 3 のオブジェクト指向プログラミングについて学びます。

Flash Builder (または無料の Flash 開発) での開発を検討してください。

OOP は、ガベージ コレクションのためのオブジェクトの整理と参照解除に役立ちます。

これがお役に立てば幸いです。あなたのゲームで幸運を祈ります。

于 2013-01-25T09:41:41.933 に答える