لماذا أحصل على أداء ضعيف عند عرض صور مختلفة باستخدام UIImage على iPhone

StackOverflow https://stackoverflow.com/questions/744327

سؤال

أنا أستخدم UIImage لعرض خريطة لعبة من كتل بحجم 32 × 32.رمز على النحو التالي

for( int x = 0; x < rwidth; ++x)
{
    for(int y = 0; y < rheight; ++y)
    {
        int bindex = [current_map GetTileIndex:x :y];
        CGPoint p;
        p.x = x * tile_size_x;
        p.y = y * tile_size_x;
        [img_list[bindex] drawAtPoint:p];
    }
}

ينتهي هذا بعرض حوالي 150 بلاطة.مشكلتي هي عندما أقوم بتشغيل هذا الكود، فإن وقت العرض الخاص بي ينخفض ​​إلى 2-3 إطارات في الثانية.

اعتقدت أن iPhone كان مقيدًا بالملء، ولكن إذا فرضت bindex على = 1 (أي عرض نفس الكتلة 150 مرة) فسأحصل على معدل إطارات كامل.

لا أستطيع أن أصدق أن عرضها من صور UIImages المختلفة أمر مكلف إلى هذه الدرجة.

هل يمكن لأحد أن يخبرني ما هو الخطأ الذي أفعله ...

لقد نسيت أن أذكر قائمة الصور الخاصة بي التي تم إنشاؤها من صفحة نسيج أكبر باستخدام CGImageCreateWithImageInRect.

شكرا ريتش

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

المحلول

قم بكسر الأدوات المفتوحة وقم بتعريف الكود الخاص بك.يبدو أنك تتجه إلى واجهة UIView، وهي غير مُحسَّنة حقًا للألعاب.نظرًا لأن UIViews مدعومة بطبقة، فإن drawAtPoint:يحتاج إلى رسم الصورة عدة مرات (إلى المخازن المؤقتة خارج الشاشة) قبل ظهورها على الشاشة.

ومع ذلك، فإن UIImage ليس مصممًا للألعاب حقًا.هناك الكثير من النفقات العامة فيما يتعلق بكونك جزءًا من UIKit.ليس من المفترض حقًا أن يكون لديك المئات منهم.

بالترتيب التقريبي للسرعة (من الأبطأ إلى الأسرع):

  • UIImage (يُستخدم عادةً إذا كان لديك عدد قليل من الصور الكبيرة)
  • CALayers (إذا كنت بحاجة إلى تحكم جيد في الرسوم المتحركة أو كان لديك ما يقرب من 20 إلى 100 مربع/صورة)
  • قوام OpelGL (ما يجب أن تستخدمه معظم الألعاب)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top