كيف يمكنك القيام باكتشاف تصادم "كذاب" مع ActionScript 3.0؟ (مع الفيديو)

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

سؤال

حسنا أولا، أنا مفاجأة Actioncript 3.0 لا يحتوي على اكتشاف الاصطدام القائم على بكسل.

على أي حال أنا أستخدم مكتبة الاصطدام وجدت هنا (أنا على استعداد لاختيار مكتبة أخرى إذا لزم الأمر)

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

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

فهل أي شخص يعرف كيفية الحصول عليه حتى عندما يكون المستخدم الذي يمشي ويتولى التل على الأرض فسوف يجعل المستخدمين يشارون أيضا يصعدون أيضا؟

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

المحلول

كان هناك مقال نشر اليوم على reddit.com حول بكسل الكشف عن الاصطدام المثالي في ActionScript 3 الذي هو جزء كشف الاصطدام من مشكلتك.

سيكون المنطق الحقيقي ما يجب القيام به عند اكتشاف تصادم. ومع ذلك، هل لاحظت من أي وقت مضى كيف تستخدم معظم ألعاب التمرير من جانب سطح المشي المسطح؟

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

// How many pixels each index of the heightMap contains.
// You'll probably want to use the same value as the distance
// your character moves when the move left/right key is pressed.
const SECTION_SIZE:int = 10; 

// Fill this as a huge array with all the heights and
// the size of this will be (mapHorizontalLengthInPixels / SECTION_SIZE).
// Each element will be the distance from the top of the screen to 
// place the character so it looks like it is standing on the ground.
var heightMap:Array = [ /* ... */ ];

// TODO: you might want to Tween to this value so it doesn't look chunky
character.y = heightMap[character.x / SECTION_SIZE];

لاستخدام نسيج بدلا من صفيف، أنت فقط وضعت كل int كان من شأنه أن يتم وضعها في heightMap صفيف في بكسل واحد من كائن bitmapdata. تتميز ميزة استخدام الملمس بتخزين كمية هائلة من المعلومات في كائن Bitmapdata صغير واستخدام GetPixel32 () لقراءة ذلك. يمكنك إنشاء الخريطة مرة واحدة، وحفظها (مثل PNG) ثم تضمينها في SWF.

إذا كنت ترغب في الحصول على Vancy، فربما ستتعلق إذا كنت تريد المنصات والجسور والكائنات المتحركة والمزيد ... ثم استخدم محرك الفيزياء 2D. هناك عدد قليل من المشاريع مفتوحة المصدر بما في ذلك بالفعل قرد, box2das3., فيس, ، و رغوة من بين أمور أخرى. سيكون منحنى التعلم أعلى والترميز أكثر صعوبة ولكن قد يؤتي ثمارها لك في النهاية. هيك، إنها تجربة نفسها لكتابة واحدة من نقطة الصفر إذا كانت حريصة!

نصائح أخرى

يبدو أنك تكتشف التصادم الرأسي مع الأرض، ولكن تجاهل الاصطدامات الأفقية. ولكن بدلا من مجرد التوقف عند الضغط على كائن أفقي (أي تغيير 1 بكسل في الأرض، سيتم التعامل مع نفس الجدار، وستحتاج إلى القفز فوقه) تحتاج إلى دفع المشغل إلى الأعلى من الكائن. كنت ترغب في الحصول على قطع هنا أيضا، لذلك لا يتم دفع المشغل إلى الجزء العلوي من الجدران عند ضربهم. لذلك، هناك شيء مثل، عند اكتشاف تصادم أفقي، نقل اللاعب إلى أعلى الكائن، ما لم يكن الجزء العلوي من الكائن هو> 10 بكسل من الموقع الحالي.

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