سؤال

أقوم بتطوير لعبة ثنائية الأبعاد لجهاز iPhone باستخدام OpenGL ES وأرغب في استخدام صورة نقطية مقاس 320 × 480 كخلفية ثابتة.

كانت فكرتي الأولى هي إنشاء رباعية مقاس 320 × 480 ثم تعيين نسيج عليها يمثل الخلفية.لذا...لقد قمت بإنشاء نسيج مقاس 512 × 512 مع صورة مقاس 320 × 480 عليه.ثم قمت بتعيين ذلك على رباعي 320 × 480.

أرسم هذه الخلفية في كل إطار ثم أرسم نقوشًا متحركة فوقها.يعمل هذا بشكل جيد باستثناء أن رسم كل هذه الكائنات (الخلفية + النقوش المتحركة) بطيء جدًا.

لقد أجريت بعض الاختبارات واكتشفت أن التباطؤ الخاص بي موجود في خط أنابيب البكسل.ليس من المستغرب أن تكون صورة الخلفية الكبيرة هي السبب الرئيسي.ولإثبات ذلك، قمت بإزالة رسم الخلفية وتم عرض كل شيء آخر بسرعة كبيرة.

أنا أبحث عن نصيحة حول كيفية الحفاظ على خلفيتي وتحسين الأداء أيضًا.

إليك بعض المعلومات الإضافية:

1) أقوم حاليًا باختبار جهاز المحاكاة (ما زلت أنتظر ترخيص Apple)

2) الخلفية عبارة عن نسيج PVR تم ضغطه حتى 128 كيلو بايت

3) كنت أتمنى أن تكون هناك طريقة لتخزين هذه الخلفية مؤقتًا في مخزن مؤقت للألوان ولكن لم يحالفني الحظ في ذلك.قد يكون ذلك بسبب قلة خبرتي في استخدام OpenGL ES أو قد تكون مجرد فكرة غبية لن تنجح :)

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

أي نصائح/مشورة سيكون موضع تقدير كبير...

شكرًا لك.

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

المحلول 3

وشكرا لكل الذين قدموا معلومات في هذا الشأن. ساعد كل من المشورة في اتجاه واحد أو آخر.

ولكن، أردت أن أوضح أن تحولت القضية الرئيسية هنا إلى أن تكون سلوك محاكاة نفسه (كما يفهم ضمنا من قبل أندرياس في رده). مرة واحدة وكنت قادرا على الحصول على التطبيق على الجهاز، فإنه يقوم بكثير، أفضل بكثير. وأذكر هذا لأنه، قبل وضع لعبي، كنت قد رأيت الكثير من الوظائف التي أشارت إلى أن الجهاز كان أبطأ بكثير من جهاز محاكاة. وهذا قد يكون صحيحا في بعض الحالات (مثل منطق التطبيق العام)، ولكن في تجربتي، والرسوم المتحركة (وخاصة التحولات 3D) أسرع بكثير على الجهاز.

نصائح أخرى

  1. لا تقم باختبار الأداء على جهاز المحاكاة.أبدًا!
    الاختلافات عن الأجهزة الحقيقية ضخمة.في كلا الاتجاهين.
  2. إذا قمت برسم الخلفية لكل إطار:
    لا تقم بمسح المخزن المؤقت للإطار.سوف تبالغ الخلفية في رسم كل شيء على أي حال.
  3. هل حقا بحاجة إلى نسيج الخلفية؟
    ماذا عن استخدام التدرج اللوني عبر ألوان قمة الرأس؟
  4. حاول استخدام وضع 2 بت للنسيج.
  5. قم بتشغيل جميع خطوات العرض التي لا تحتاجها للخلفية.
    على سبيل المثال:الإضاءة، المزج، اختبار العمق، ...

إذا كان بإمكانك نشر بعض رموز الرسم الخاصة بك، فسيكون من الأسهل كثيرًا مساعدتك.

إذا كنت تريد أن تجعل لعبة 2D، هل هناك أي سبب كنت لا تستخدم مكتبة موجودة؟ على وجه التحديد، وcocos2d ل iPhone قد يكون يستحق وقتك. لا أستطيع الإجابة على سؤالك حول كيفية إصلاح المشكلة فعل كل شيء بنفسك، ولكن أستطيع أن أقول أنني قد فعلت بالضبط ما كنت تتحدث عن (وجود خلفية شاشة واحدة كاملة مع العفاريت في الأعلى) مع cocos2d ويعمل عظيم. (على افتراض 60 إطارا في الثانية بسرعة كافية بالنسبة لك.) قد يكون لديك أسبابك لفعل ذلك بنفسك، ولكن إذا كنت تستطيع، وسأكون في غاية توحي على الأقل القيام نموذج أولي سريع مع cocos2d ومعرفة ما إذا كان هذا لا يساعد لك على طول. (التفاصيل والمصدر لإصدار فون هنا: http://code.google.com/ ع / cocos2d-فون / )

وأنا لا أميل لديهم خبرة كبيرة مع برنامج OpenGL ES، ولكن يحدث هذه المشكلة بشكل عام.

ولديك فكرة عن 'عازلة لون' هو الحدس الجيد، أساسا كنت تريد أن تكون تخزين خلفيتك كمنطقة عازلة الإطار وتحميله مباشرة على عازلة التقديم الخاص بك قبل وضع المقدمة.

في برنامج OpenGL هذا هو إلى حد ما على التوالي إلى الأمام مع كائنات العازلة الإطار (في FBO). للأسف لا أعتقد أن برنامج OpenGL ES يعتمد عليها، لكنها قد تعطيك مكان للبدء في النظر.

وقد ترغب في محاولة استخدام هذه المنظمات و(كائنات فيرتكس الواق) ونرى ما اذا كان يسرع الأمور. البرنامج التعليمي هو هنا

وبالإضافة إلى ذلك، رأيت للتو، أنه منذ برنامج OpenGL ES V1.1 و هناك هي وظيفة تسمى glDrawTex (رسم نسيج) التي تم تصميمها ل

<اقتباس فقرة>   

وتقديم سريع من اللوحات الخلفية، رموزا الخط نقطي، وعناصر صياغة 2D في ألعاب

  1. يمكنك استخدام كائنات المخزن المؤقت للإطار المشابهة لمثال GLPaint من Apple.
  2. استخدم أطلس النسيج لتقليل عدد مكالمات السحب التي تجريها.يمكنك استخدام glTexCoordPointer لتعيين إحداثيات النسيج التي تعين كل صورة على موضعها الصحيح.تذكر أن تقوم بتعيين المخزن المؤقت لقمة الرأس أيضًا.من الناحية المثالية، ستعرض مكالمة رسم واحدة مشهدك ثنائي الأبعاد بالكامل.
  3. تجنب تمكين/تعطيل الحالات حيثما أمكن ذلك.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top