2011-07-25 11 views
1

私は2つのNSMutableArrays、collectablesおよびcollectableViewsを持っています。タイマー付きオブジェクトの削除

私のアプリは、しかし..私は収集品は、一定の時間後に消えてしたいと思います...

を動き回ると、ポイントの収集品(コイン、リンゴ、バナナ、など)を集める文字で構成されていModel/View/Controllerのデザインを混乱させないためにNSTimerをどこに置くべきかについては混乱しています。私は、各モデルに個別のタイマーを置く場合

例えば、モデルは、ビューを知っていないと、ビューを削除することはできません。..

私はコントローラにNSTimerを入れた場合、私はする必要があります画面上のすべてのコレクタブルで構成される別の配列を作成し、最初に有効期限が切れます。タイマーの方法は1秒ごとに起動し、それぞれの回収可能枚数を期限に応じて削除します。

これを行うより簡単で良い方法はありますか?

答えて

2

ほとんどのゲームは、この種の「状態監視」を1つまたは複数のゲームクロックを使用してモデル化しています。

  1. 、継続時間を含むデータ構造を作成します ポインタ機能、およびオブジェクト変数の配列:あなたはこのような何かを行うことができます。この例では、 DecayEventを呼び出します。
  2. は、適切なイベント処理間隔を選択して、いくつかの素敵なアクセサメソッド
  3. と、 コントローラ(メイン)あなたの前でDecayEventの静的、可変配列を作成します。 というイベントの最大数を処理するには十分な大きさであるが、ユーザーエクスペリエンスを遅らせるほどの大きさではないほど十分に大きいサイズの が必要です。
  4. フロントコントローラーで、減衰イベントの配列 を処理するメソッドを作成します。メソッドが呼び出されるたびに、 は配列を反復し、イベントの継続時間を イベント処理間隔でデクリメントします。減衰イベントの継続時間が 以下になると、 'イベントを発生させます'(基本的に、コールバック引数を持つ別のスレッドで のコールバック関数を起動します)。
  5. メインスレッドにNSTimerを作成します。すべてのイベント処理間隔で 処理メソッドを呼び出すように設定します。

あなたが望むようにすべての作業を行うにはかなり微調整する必要がありますが、上記の手順は一般的に機能します。

幸運を祈る!

1

現在の状況では、コントローラーは各データモーダルとアレイにアクセスできるビューにアクセスできるため、タイマーをコントローラーに保持する必要があります。 NSNotificationCenterを使用する方法もあります。まず試してみてください。それがうまくいかない場合は、私たちにお知らせください。

関連する問題