2

私は、メモリが常に問題となるモバイル プラットフォーム向けのゲームに取り組んでいます。

基本抽象クラスの敵を使用しています。他のすべての敵は、このクラスのバリアントになります。

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

私の質問は次のとおりです。ロード (またはレベル) ごとにおそらく数百の敵がいる場合、各敵が参照する 1 つの大きなクラスにすべての動作を記述してメモリを節約できますか? 言い換えれば、何百もの敵がいて、それぞれが大量の動作コードを持っている場合、単一の参照クラスにすべてを格納するよりもはるかに多くのメモリが必要になるでしょうか?

最初のアイデア:

enemy.Update()

メモリ節約のアイデア:

//Static class is named EnemyBehavior
EnemyBehavior.UpdateEnemy(enemy)
4

2 に答える 2

8

クラスの各インスタンスには、メモリを消費する独自のプライベートな変数のコピーがありますが、メソッド定義の個別のコピーはありません。メソッドは、インスタンスごとではなく、クラスごとにメモリを消費します。クラスインスタンスがメソッドの定義を変更することはできないため、これは理にかなっています。申し訳ありませんが、あなたのアイデアはメモリを節約しません。

于 2012-04-14T02:56:25.757 に答える
4

それはメモリの仕組みとはまったく異なります。ヒープには、実際のコードではなく、データと参照を格納する必要があります。そのため、「共通コード」を静的クラスに格納する場所を決定しても、何も保存されません。コードをオブジェクト インスタンスに含めても、すべてのインスタンスに物理的にコピーされるわけではありません。

あなたが提案していることは、動作のカプセル化と関心の分離であるオブジェクト指向プログラミングの理由全体に反します。

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

于 2012-04-14T02:57:01.710 に答える