2

私はローグライクゲーム(iOS / Cocos2d)を開発しています。たくさんのGameObjectsを持つクラスMapのオブジェクトがあります。

GameViewControllerクラスがあります。モデル内で何かが発生した場合(クリーチャーが殺された、プレーヤーが移動したなど)、この変更についてGameViewControllerに通知する必要があります。どうやってするか?

2つのオプションがあります。

  1. GameViewControllerインスタンスは、MapのデリゲートおよびすべてのGameObjectのデリゲートである可能性があります。
  2. GameViewControllerは、MapおよびGameObjectsからNSNotificationsをリッスンします。

どちらが良いですか?なんで?

4

1 に答える 1

0

Cocosは強力なシングルトンベースのライブラリであるため、Cocosゲームではシングルトン方式が非常に一般的です。これは、論理的なデフォルトの選択であることを意味するものではありません。

2番目のオプションは、一般的に、Cocosだけでなく、どのプログラムに対しても賢明で安全なアプローチです。NSNotificationsを使用すると、プログラム内で多数の参照またはシングルトンを渡すという潜在的にバグのある状態になることなく、他のオブジェクトからオブジェクトに通知できます。いくつかの通知で目標を達成できる場合は、これが最適な方法です。

毎秒複数の通知など、NSNotificationsを極端に使用している場合は、ポインタを介してオブジェクト間で参照を渡すか、親クラスまたはメインのCocosシーンクラスをシングルトンとして作成することを検討する必要があります。

シングルトンを使用する場合、それらは実装は簡単ですが、悪用するのも同じくらい簡単であることを覚えておいてください。親と親のメソッドに簡単にアクセスできるという理由だけで、子クラスに兄弟の動作を制御させる習慣を身に付けたくはありません。

于 2012-04-09T01:39:49.343 に答える