|
|
|||||
массив в спрайт и смена глубины
Всем привет.
Искал на данном форуме ответы на свои 2 вопроса - не смог найти, ситуации не те, которые у меня. Проблемы 2. 1. не получается правильно добавить массив в спрайт. в цикле прохожу по массиву и это мне надо добавить в спрайт. объявил переменную, тип спрайт сделал. var _imgHolder : Sprite = new Sprite(); //сюда нужно вставить элементы массива for (var i:int = 0; i < loadedImages.length; i++) { loadedImages[i].img.alpha = 0; loadedImages[i].img.x = 0; loadedImages[i].img.y = 0; addChildAt(loadedImages[i].img, i); } в этом и прошу помощи ;(... как правильно обращаться к элементу массива, если он находится в спрайте. спрайт нужен , чтобы потом я мог располагать элементы правильно на экране. а вот вопрос №2: у меня слайд шоу. картинки читаю нормально, анимирую спомощью TweenMax.to(loadedImages[oldId].img, 0.7, { y: -loadedImages[oldId].img.height + (loadedImages[oldId].img.height / 2), ease:Expo.easeOut } ); TweenMax.to(loadedImages[nowId].img, 0.7, { y:0, onComplete:animateProgress, onCompleteParams:[nowId], ease:Expo.easeOut } ); как-то получилось сделать смену глубины, чтобы новая картинка (которая приезжает) была всегда сверху, в этом случае картинка которая должна уехать - она не анимируется, а просто встаёт под новую (которая приезжает). Стараюсь сделать слайдшоу как на http://sala12.com , лучший пример показать что я планирую сделать. Помогите пожалуйста дельными советами?
__________________
весь хлеб свежий |
|
|||||
Регистрация: Mar 2011
Сообщений: 243
|
1) После добавления на Sprite обращение к массиву не меняется, вы же не переносите элементы, а просто создаёте ссылки
|
|
|||||
добавил.
Но если я читаю анимацию он показывает только белый экран. если ошибка, типа у спрайта нет такого свойства...
__________________
весь хлеб свежий |
|
|||||
Регистрация: Mar 2011
Сообщений: 243
|
Обращение должно быть такое
Возможно вы пытаетесь обратиться до создания или элемента с oldId не существует
|
|
|||||
если обращаюсь к нулевому элементу, да и к любому другому из массива - ... белый экран.
существует и элемент и всё остальное, ошибок не выводится. alpha не меняется твинером. Добавлено через 24 минуты ответа найдено не было... ( так жаль
__________________
весь хлеб свежий |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вы приводите строчку из кода, в которой априори все правильно написано, чтобы показать всем, что Вы не виноваты и все это мистические проделки Альдмерского Доминиона? Если Вы сами понимаете, что все здесь правильно написано, то ошибка где-то в другом месте, верно? Так зачем постить здесь код БЕЗ ошибки, и надеяться, что по нему Вам найдут ошибку? Мы же тут не телепаты))
Добавлено через 8 минут Для начала: _imgHolder добавлен на сцену? В коде я этого не вижу.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 01.02.2012 в 22:13. |
|
|||||
Эммм... блин, один вопросом про добавление на сцену - вы указали на ошибку. _imgHolder действительно не был добавлен. .. хорошо, первая проблема ушла, спасибо.
А как быть со второй? Я много читал про setChildIndex и addChildAt , но не нашёл варианта как бы его применить так. анимация начинается с первой картинки и прогрессбара. анимация прогресса проходит, по завершении начинается высчитывание старой и новой картинок, точнее ставятся идентификаторы. проще кодом private function setNewId(currentId) : void { var oldId : int = currentId; TweenMax.to(progressAnim, 0, { frame:0 }); //эти две строки касаемы прогрессбара, тут норм всё TweenMax.to(progressAnim, .1, { alpha:0 } ); if (currentId == loadedImages.length-1) { currentId = 0; } else { currentId++;//увеличиваем id } animateImage(currentId, oldId, loadedImages.length-1);//запуск функции анимирования } private function animateImage(nowId:int, oldId:int, howMuch:int) { loadedImages[nowId].img.y = stage.stageHeight; loadedImages[nowId].img.alpha = 1; //анимация уезда текущей картинки. onStart - запускается функция смены глубины и ещё функция ресайза. TweenMax.to(loadedImages[oldId].img, 0.7, { y: -loadedImages[oldId].img.height + (loadedImages[oldId].img.height / 2), onStart:swapDepths, onStartParams:[nowId,oldId], onStart:Resizer.resizeBg, onStartParams:[loadedImages[oldId].img, Main.instance.stageWidth, Main.instance.stageHeight], ease:Expo.easeOut } ); //анимация приезда новой картинки(следующей по id). срабатывают одновременно. по окончании запускается работа прогрессбара TweenMax.to(loadedImages[nowId].img, 0.7, { y:0, onStart:Resizer.resizeBg, onStartParams:[loadedImages[nowId].img, Main.instance.stageWidth, Main.instance.stageHeight], onComplete:animateProgress, onCompleteParams:[nowId], ease:Expo.easeOut } ); } //функция смены глубины public function swapDepths(now:int, old:int):void { setChildIndex(loadedImages[old].img, loadedImages[now].img); } Помогите как-то найти решение моей проблемы. Плиз. Добавив спрайт на сцену и туда элементы массива, мне стала выпадать вот такая ошибка Error #2025: The supplied DisplayObject must be a child of the caller. НО... ролик работает, но глубины также не распределяются как мне надо. Добавлено через 42 минуты Решение нашёл... оказалось в первом случае протупил. Во втором - надо было просто лучше подумать) Спасибо за ответы.
__________________
весь хлеб свежий Последний раз редактировалось dream'r; 01.02.2012 в 22:39. Причина: добавка |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Хочу дать один совет на будущее. Всегда заменяйте конструкции типа loadedImages[nowId].img простой ссылкой, если обращение производится несколько раз. Потому что плеер каждый раз поизводит полный поиск - ищет свойство loadedImages, ищет у него свойство nowId, ищет у него свойство img. Лучше создайте переменную и запишите в нее ссылку на экземпляр или свойство (если оно не простое конечно)
private function animateImage(nowId:int, oldId:int, howMuch:int) { var img:DisplayObject = loadedImages[nowId].img as DisplayObject; var old:DisplayObject = loadedImages[oldId].img as DisplayObject; img.y = stage.stageHeight; img.alpha = 1; //анимация уезда текущей картинки. onStart - запускается функция смены глубины и ещё функция ресайза. TweenMax.to(old, 0.7, { y: -old.height + (old.height / 2), onStart:swapDepths, onStartParams:[nowId,oldId], onStart:Resizer.resizeBg, onStartParams:[old, Main.instance.stageWidth, Main.instance.stageHeight], ease:Expo.easeOut } ); //анимация приезда новой картинки(следующей по id). срабатывают одновременно. по окончании запускается работа прогрессбара TweenMax.to(img, 0.7, { y:0, onStart:Resizer.resizeBg, onStartParams:[img, Main.instance.stageWidth, Main.instance.stageHeight], onComplete:animateProgress, onCompleteParams:[nowId], ease:Expo.easeOut } ); }
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 06:35. |
|
« Предыдущая тема | Следующая тема » |
Теги |
Глубина , массив , спрайт |
Опции темы | |
Опции просмотра | |
|
|