سؤال

وأنا جديدة في التنمية فون. لدي الإعداد اللعبة حلقة النحو التالي.

(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 المشتقة).

إذا أدعو تحديث بلدي عبر الوقت وبعد ذلك كل شيء حسن وجيد.

هل تستطيع أن تقول لي لماذا تجعل فشل عندما فعلت عبر عن المواضيع؟ وهل من الممكن أن تجعل من العمل عبر المواضيع؟

والشكر الأغنياء

هل كانت مفيدة؟

المحلول

ولا يمكنك (وأيضا، لا ينبغي أن) الدعوة -drawRect: مباشرة. بدلا من ذلك، استخدم -setNeedsDisplay. وبعد ذلك سيتم تحديث وجهة نظركم في المرة القادمة من خلال حلقة الحدث. إذا كنت تقوم بتشغيل هذا في موضوع مستقل، قد تحتاج إلى استخدام performSelectorOnMainThread:.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top