تغيير مؤشر الطفل من movieclips بناء على موقف y الخاص بهم؟
-
14-11-2019 - |
سؤال
أنا أكتب لعبة مع 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!