|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
RangeError: Invalid child index in Starling
Вообще-то нет разницы Старлинг это или обычный дисплей лист.
Смысл в том, что на сцене имеется несколько объектов (картинки и текст) для которых важно положение относительно друг друга по глубине (depth). Отправляем их в БД на сервере и, если картинки, то тоже сохраняем на сервере. Везде записываем индекс картинки, он же depth. Теперь при загрузке с сервера загружаем картинки сихронно лоадером, чтобы было быстрее. Но, т. к. они все разных размеров, то если мелкие лежали над крупными, то оказываются под ними. Начинаю юзать addChildAt - получаю ошибки с rangeError: Invalid child index
__________________
In Code We Trust |
|
|||||
код покажешь?
__________________
местонахождение |
|
|||||
Славик, спасибо, твой вопрос подтолкнул меня к поискам.
Повесил слушатель на Event.COMPLETE для каждой картинки и по её срабатыванию: scene.setChildIndex((e.target as Picture), (e.target as Picture).depth); Вроде работает.
__________________
In Code We Trust |
|
|||||
я бы прям фак запилил уже..
__________________
местонахождение |
|
|||||
Цитата:
Я полагаю, надо как-то так |
|
|||||
Регистрация: Jan 2011
Сообщений: 200
|
а я как раз тоже на таком моменте и ловил эту ошибку.
|
|
|||||
Скорее всего вы пытаетесь расставлять чайлды до того как они все были добавлены в родителя, соответственно вылетаете с индексом, ловите "маловероятное событие".
__________________
Будь проще. |
|
|||||
Ну и второй вариант - когда мы пытаемся поменять глубину тому, что уже есть в дисплей листе. Получается примерно так (на спичках):
- всего в стопке 10 коробков - мы хотим переставить самый нижний коробок (ну или из середины, не важно) на самый верх - вынимаем коробок (с позиции 0) из стопки и ставим на позицию 10 (логично, ведь раньше в стопке было 10 коробков, индексация у нас с 0) Вроде все верно. Но. Тут кроется ошибка - на момент постановки коробка на самы верх, в стопке всего 9 коробков, а не 10. Ведь мы сначала вынимаем, а потом ставим наверх.
__________________
...вселенская грусть |
|
|||||
А почему бы не отсортировать картинки при запросе по глубине
а потом грузить их по очереди, то есть слушатель COMPLETE загрузчика записать так: loader.addEventListener(Event.COMPLETE, loadNext); loadNext(); ... function loadNext(e:Event = null) { if(nextID >= images.length) { //все загружено return; } if(e != null)//для первого вызова слушателя addChild(e.target.data); loader.load(images[nextID]); nextID++; } P.S. Псевдокод Последний раз редактировалось C4Grey; 11.11.2013 в 15:58. |
Часовой пояс GMT +4, время: 10:14. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|