2012-04-14 8 views
2

私は、メモリが常に懸念されるmoblieプラットフォームのゲームに取り組んでいます。メソッドを1つのBigクラスに入れるために「メモリを節約しますか? (多くのオブジェクト)

私は基本抽象クラスの敵を使用しています。他のすべての敵はこのクラスの変種になります。

私の最初の目的は、敵を基本クラスに更新するためのメソッドを格納し、次に各敵のクラスに特定の動作を格納することです。

私の質問はこれです:負荷(またはレベル)ごとに何百もの敵がいると、すべての行動をすべての敵が参照する1つの大きなクラスに書き込んでいますか?言い換えれば、膨大な数の敵を抱えているのですが、それぞれに膨大な数の行動コードがあり、すべてを単一の参照クラスに格納するよりもはるかに多くのメモリを必要としますか?

最初のアイデア:

enemy.Update() 

メモリ節約アイデア:

//Static class is named EnemyBehavior 
EnemyBehavior.UpdateEnemy(enemy) 
+0

コードはクラスに格納されません。クラスはデータのみを格納します。 –

+0

あなたは* instance *、@Davidを意味すると思います。 –

+0

クラスは、インスタンスにデータを格納します(yes)。しかし、コードはどこにも格納されません。 –

答えて

8

あなたのクラスの各インスタンスは、その変数の独自のプライベート、メモリを消費するのコピーを持っていますが、それはないを持っていますそのメソッド定義のコピーを分離します。メソッドは、クラスではなくメモリを消費します。これは、クラスインスタンスがメソッドの定義を変更することは不可能であるため、意味があるだけです。だから、申し訳ありませんが、あなたの考えは記憶を保存しません。

+0

それは私が聞くことを望んでいたものです。ありがとうございました! – julio9

4

これはあまりメモリが動作しない方法です。ヒープは、データと参照を格納する必要があります。実際のコードはではありません。したがって、静的クラスに「共通コード」を格納する場所を決めることで、オブジェクトインスタンスを持つコードが物理的にすべてのインスタンスにコピーされるわけではありません。

あなたが示唆しているのは、オブジェクト指向プログラミングの全面的な理由ではなく、動作のカプセル化と懸念の分離です。

tl; dr - クラス自体でコードを保持します。

+0

さて、型は "ヒープ"に格納されますが、型ご​​とに1回だけ大部分無視されるように;-) –

+0

すべての言語がこのように動作するわけではありません。いくつかのスクリプティング言語などのいくつかのよりダイナミックな言語は、クラス定義でクラスメソッドを定義するのではなく、基本的にすべてのメソッドをデリゲートとして扱います。 – Servy

関連する問題