2

iPhone開発初心者です。次のようにゲームループを設定しています。

(void)CreateGameTick:(NSTimeInterval) in_time
{
  [NSThread detachNewThreadSelector:@selector(GameTick) toTarget:self withObject:nil];
}

私の基本的なゲームのティック/レンダリングは次のようになります

(void)GameTick
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  CGRect wrect = [self bounds];

  while( m_running )
  {
    [self drawRect: wrect];
  }

  [pool release];       
}

レンダリング関数が呼び出されます。ただし、何も描画されません (コア グラフィックスを使用して、派生した UIView にいくつかの線を描画しています)。

タイマーを介して更新を呼び出すと、すべてがうまくいきます。

スレッド経由でレンダリングすると失敗する理由を教えてください。そして、スレッドを介して動作させることは可能ですか?

ありがとうリッチ

4

1 に答える 1

4

-drawRect: を直接呼び出すことはできません (そうすべきではありません)。代わりに、-setNeedsDisplay; を使用してください。その後、ビューはイベント ループを通じて次回更新されます。これを別のスレッドで実行している場合は、performSelectorOnMainThread: を使用する必要がある場合があります。

于 2009-03-06T19:32:05.053 に答える