سؤال

أنا أكتب لعبة مع Flash CS5 / AS 3.0 يحاول محاكاة عمق الحقل عن طريق رسم جميع مقاطع الأفلام ذات الصلة بناء على وضع Y الخاص بهم بترتيب تصاعدي، أي الأشياء الأقل في المرحلة تتداخل الأشياء أعلى على المسرح وبعد لذلك، يجب أن يحتاج Movieclip بموضع y إلى 10 مؤشرا أقل مقارنة ب Movieclip مع موقع Y يبلغ 20 عاما، وبالتالي فإن المرء الثاني يحصل على رأسه أولا.

كتبت وظيفة سريعة وقذرة فقط لاختبار هذا. خلال التتبع، لاحظت أن مؤشر الشاحنة يضرب 0 عندما أذهب بالقرب من الجزء العلوي من المرحلة، ولكن إذا ذهبت بعيدا، فسوف تختفي تماما من المرحلة. تتبع ثم يبدأ في إنشاء هذا الخطأ:

argumentError: خطأ # 2025: يجب أن يكون DisplayObject المرفق طفلا للمتصل.
في Flash.DisPlay :: DisplayObjectContainer / GetchildIndex ()
في EIT :: GAME / REORGANIZEISPLAYINDES ()
في EIT :: GAME / LOOP ()

thetruck هو movieclip من المركبة التي تسيطر عليها اللاعب الأعداء والمخاريط والصخور هي صفائف تحتوي على movieclips

لا يوجد لديه مستمعي الأحداث. giveacodicetagpre.

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

المحلول

Hint: You don't need to remove the child first. When you use addChild() on an object, it is automatically re-added to the next highest depth.

That said, you'll just need to do something like this:

drawableObjects.sortOn("y");

for each(var i:DisplayObject in drawableObjects)
{
    if(i.parent)
        i.parent.addChild(i);
}

نصائح أخرى

Use setChildIndex instead of removing and re-adding:

for (var a:int = collisionLayer.numChildren - 1; i >= 0; i--)
{
    collisionLayer.setChildIndex(drawableObjects[i], i);
}

Also, it's a bit wasteful to first order the sort in descending and then reversing the array. Sort it ascending to begin with!

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