![]() |
Как сделать связь между Y и ChildIndex мувиклипа? (Z-последовательность) #Решено
Всем привет! Помогите кому не лень)
Есть массив с клипами которые добавляются поочередно и также по ходу дела могут быть удалены. Мне же нужно что бы было так: чем больше у клипа Y тем меньше его позиция индекса в списке дочерних элементов относительно всех остальных клипов в массиве. Как это реализовать? #Решено! Спасибо callme Код AS3:
Код AS3:
|
Если массив имеется ввиду обычный массив или вектор, то у них есть метод sort, куда можно передать нужную функцию для сортировки.
Если надо сортировать детей DisplayObjectContainer, то придётся написать алгоритм сортировки самостоятельно. Пригодится метод swapChildrenAt. |
Цитата:
только как?( |
Код AS3:
|
callme,
Скорее всего, человеку нужно сортировать динамический список отображения, поэтому такой хитрый план с отдельным массивом не подойдёт. :) zCHESNOKz, Вам просто нужно обойти список отображения особым способом. То есть, используя один из алгоритмов сортировок. Готового решения у меня нету. |
Цитата:
|
Так и думал, что просто так от этого "лёгкого пути" не откажутся. :)
Список отображения уже является массивом. Зачем плодить ещё? Всё это будут костыли только ради использования нативного sort. Так код усложнится, потребление памяти и цп вырастет. Правильным решением будет написать всего одну функцию, в которой реализовать подходящий алгоритм сортировки, с минимальными ресурсозатратами. Она потом на всю жизнь пригодится. |
Цитата:
Это получается как в изометрии. Или там как то проще все считается? |
В изометрии ещё бывает, что к y прибавляют x. То есть сортируется как: 1.x + 1.y > 2.x + 2.y Это нужно для того, чтоб объекты стоящие на одинаковой y не "скакали" в списке отображения.
В играх код никогда не был простым. Самое простое решение это сортировать элементы "каждый с каждым". Но понятное дело, что с такой сортировкой вы сможете показать на экране совсем не много объектов, перед тем как приложение начнёт фризить и виснуть. Поэтому, я дал вам ссылку на вики, где описываются различные алгоритмы сортировок. Нужно прочитать, изучить, выбрать самый оптимальный вариант под свои конкретные нужды и реализовать. |
Цитата:
Я понял. Я тоже сортировал массив по 'y'. А дальше, как относительно положения в (отсортированном) массиве расположить графические объекты с нужным положением глубины отображения? |
Цитата:
|
Цитата:
Каждый раз после сортировки надо выполнять вот этот код: Код AS3:
|
Когда я создавал подобные игры, я не использовал сортировку дисплей листа ибо это влияет на производительность, но взамен этого я каждый раз генерировал дисплей лист. Мой метод заключался в следующем.
Создается двумерный массив, в первом массиве хранится индекс массива который определяется по сортируемой величине, второй массив хранит объекты имеющие данную величину. Код примерно следующий Код AS3:
|
Код AS3:
|
Цитата:
Готов поспорить, что сортировка предложенная callme, будет работать гораздо быстрее |
Цитата:
И в правду, насколько это будет пагубно влиять на производительность? Если допустим объектов будит до 30, не говорю уже больше 100. А можно ли это использовать в изометрии? Там ведь тоже много объектов. Или в изометрии все как то иначе? |
и 30 и 100 объектов - это ничто. У меня в игре сортировалось около тысячи объектов при 30 кадрах в секунду. При этом fps не проседал (хотя сортировка у меня была выборочная, алгоритм ниже), учитывая даже то, что там еще и постоянное взаимодействие с сервером и бокс2д (который, как известно, довольно тупой)
Игрушка браузерная. Для мобил могут быть затупы при таких объемах как у меня. Но если использовать старлинг, то у него есть уже встроенный метод sortChildren(), который работает довольно быстро Код AS3:
|
Цитата:
Только хотел спросить, может лучше писать: Код AS3:
Код AS3:
Вот еще нашел в сети называется - Z-последовательность Код AS3:
|
Цитата:
|
| Часовой пояс GMT +4, время: 20:00. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.