質問

私は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];       
}

レンダリング関数が呼び出されます。ただし、何も描画されません(Core Graphicsを使用して、派生UIViewに線を描画しています)。

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

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

ありがとう リッチ

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top