أفضل طريقة طلب z للألعاب القائم على البلاط، Cocos2d-iPhone؟

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

سؤال

أريد أن أجعل ألعاب iPhone مقرها IPHONE مع COCOS2D.

يجب استخلاص العفاريت على رأس العفاريات الأخرى التي تعتبر "وراء" ذلك. أبحث عن أفضل طريقة للقيام بذلك.

أود تجنب خوارزمية الرسام لأنها تنطوي على فرز جميع العفاريت كل إطار مكلف.

الخوارزمية المخزنة Z مدعومة من GPU و Cocos2D لذلك هذا ما أود استخدامه، ولكن هناك مشكلة. بعض العاريات، مثل المباني على سبيل المثال، تشغل بلاط متعددة. تعيين قيمة Z هذه العدادات صعبة.

هذه هي الخيارات التي فكرت بها:

  1. مقارنة مبنيين وتحديد واحد هو "في المقدمة" هو سهل. لذلك يمكن فرز المباني ثم تعيين قيمة z بناء على ترتيب الفرز. هذا لن يكون مختلفا عن الرسام خوارزمية. لن يكون المخزن المؤقت OpenGL ES Z.
  2. تعيين قيمة z لكل مبنى يعتمد على موقعه الخريطة (دون معرفة حيث توجد مباني أخرى). انا العثور على هذا الصعب. أعتقد أنه من الممكن، لكنني لم أكن قادرة على التوصل إلى صيغة حتى الآن.
  3. استخدم عدسات متعددة للصور التي تشغل أكثر من بلاط واحد ستكون جميع العفاقات بنفس الحجم تماما. z أوامر يمكن بعد ذلك يتم تعيينها بسهولة بناء على البلاط الذي يشغل العفريت. ال مشكلة في هذا الحل هو أنه يجعل منطق اللعبة أكثر من ذلك بكثير معقد. جميع العمليات على مبنى واحد يجب أن تكون المتكرر لكل فريت المبنى يتكون من. أرغب ب تعامل كل كائن ككيان واحد.
  4. تعديل رمز Cocos2D للسماح بالصدارات للحصول على قيم Z متعددة في نقاط مختلفة. إذا كان العفريت يمكن أن يكون له قيم متعددة Z بناء على ما البلاط جزء معين من العفريت يسقط، ثم حساب قيمة Z لهذا القسم سهل. لن أحتاج إلى مقارنة العفريت إلى أي عفاريات أخرى. أعتقد أن هذا ممكن باستخدام كواد متعددة لكل عفريت. المشكلة مع هذا هو أنه هو معقد قليلا بالنسبة لي منذ أن أنا جديد في OpenGL ES و Cocos2D. أنا لا أفهم تماما كيف كل هياكل البيانات الداخلية الشغل. على الرغم من أنه يبدو أن معظم الحل أناقة إذا كانت صيغة لا يمكن العثور عليها.

    سأقوم بالتصويت على أي اقتراحات أو إشارات إلى موارد مفيدة.

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

المحلول

مقابل # 2، يمكنك حساب مسافة مانهاتن في مركز الكائن واستخدام هذه القيمة كقيمة Z لهذا الكائن.ستعمل طالما أنك تتجنب أشياء طويلة جدا في خريطتك مثل كائن 5x1 أو أسوأ.ولكن إذا كنت بحاجة فعلا إلى كائن طويل يتم وضعه في خريطة مبلطة، فإن إدارة ترتيب Z. من الكائنات في الخريطة عن طريق تعيين قيمة Z باستخدام صيغة مستحيلة.

لإثبات هذا:
1.) ضع كائنين 2 × 2 في خريطة أفقيا وترك بلاط الوحدة بينهما.
2.) ضع كائن 3x1 بينهما.دعونا اسم كائنات 2x2 إلى A و B، وكائن 3x1 إلى C.
3.) إذا قمت فقط بتدوير C (غير متغير موقفه)، z- ترتيب التبادل A و B.

-If B موجود الآن، وسيكون بعض الكائنات وراء B أمامنا بسبب تناوب C. وهي مكلفة لمعرفة الأشياء الموجودة في الجزء الخلفي من كل من A و B سابقا سيصبح أمامبعد دوران ج.

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