Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.02.2012, 17:55
dream'r вне форума Посмотреть профиль Отправить личное сообщение для dream'r Посетить домашнюю страницу dream'r Найти все сообщения от dream'r
  № 1  
Ответить с цитированием
dream'r

Регистрация: Nov 2000
Адрес: russia, moscow
Сообщений: 21
Отправить сообщение для dream'r с помощью ICQ
По умолчанию массив в спрайт и смена глубины

Всем привет.
Искал на данном форуме ответы на свои 2 вопроса - не смог найти, ситуации не те, которые у меня.

Проблемы 2.
1. не получается правильно добавить массив в спрайт.
в цикле прохожу по массиву и это мне надо добавить в спрайт.
объявил переменную, тип спрайт сделал.
Код AS3:
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:
у меня слайд шоу. картинки читаю нормально, анимирую спомощью
Код AS3:
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 , лучший пример показать что я планирую сделать.

Помогите пожалуйста дельными советами?
__________________
весь хлеб свежий

Старый 01.02.2012, 18:00
Deimos747 вне форума Посмотреть профиль Отправить личное сообщение для Deimos747 Найти все сообщения от Deimos747
  № 2  
Ответить с цитированием
Deimos747
 
Аватар для Deimos747

Регистрация: Mar 2011
Сообщений: 243
1) После добавления на Sprite обращение к массиву не меняется, вы же не переносите элементы, а просто создаёте ссылки

Старый 01.02.2012, 18:04
dream'r вне форума Посмотреть профиль Отправить личное сообщение для dream'r Посетить домашнюю страницу dream'r Найти все сообщения от dream'r
  № 3  
Ответить с цитированием
dream'r

Регистрация: Nov 2000
Адрес: russia, moscow
Сообщений: 21
Отправить сообщение для dream'r с помощью ICQ
Код AS3:
_imgHolder.addChild(loadedImages[i].img)
добавил.
Но если я читаю анимацию
Код AS3:
TweenMax.to(loadedImages[oldId].img, 0.7...
он показывает только белый экран.

если
Код AS3:
TweenMax.to(_imgHolder.loadedImages[oldId].img, 0.7...
ошибка, типа у спрайта нет такого свойства...
__________________
весь хлеб свежий

Старый 01.02.2012, 18:09
Deimos747 вне форума Посмотреть профиль Отправить личное сообщение для Deimos747 Найти все сообщения от Deimos747
  № 4  
Ответить с цитированием
Deimos747
 
Аватар для Deimos747

Регистрация: Mar 2011
Сообщений: 243
Обращение должно быть такое
Код AS3:
loadedImages[oldId].img
Возможно вы пытаетесь обратиться до создания или элемента с oldId не существует

Старый 01.02.2012, 18:26
dream'r вне форума Посмотреть профиль Отправить личное сообщение для dream'r Посетить домашнюю страницу dream'r Найти все сообщения от dream'r
  № 5  
Ответить с цитированием
dream'r

Регистрация: Nov 2000
Адрес: russia, moscow
Сообщений: 21
Отправить сообщение для dream'r с помощью ICQ
Код AS3:
TweenMax.to(loadedImages[0].img, .3, { alpha:1,....
если обращаюсь к нулевому элементу, да и к любому другому из массива - ... белый экран.
существует и элемент и всё остальное, ошибок не выводится. alpha не меняется твинером.

Добавлено через 24 минуты
ответа найдено не было... ( так жаль
__________________
весь хлеб свежий

Старый 01.02.2012, 22:03
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вы приводите строчку из кода, в которой априори все правильно написано, чтобы показать всем, что Вы не виноваты и все это мистические проделки Альдмерского Доминиона? Если Вы сами понимаете, что все здесь правильно написано, то ошибка где-то в другом месте, верно? Так зачем постить здесь код БЕЗ ошибки, и надеяться, что по нему Вам найдут ошибку? Мы же тут не телепаты))

Добавлено через 8 минут
Для начала: _imgHolder добавлен на сцену? В коде я этого не вижу.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 01.02.2012 в 22:13.
Старый 01.02.2012, 22:35
dream'r вне форума Посмотреть профиль Отправить личное сообщение для dream'r Посетить домашнюю страницу dream'r Найти все сообщения от dream'r
  № 7  
Ответить с цитированием
dream'r

Регистрация: Nov 2000
Адрес: russia, moscow
Сообщений: 21
Отправить сообщение для dream'r с помощью ICQ
Эммм... блин, один вопросом про добавление на сцену - вы указали на ошибку. _imgHolder действительно не был добавлен. .. хорошо, первая проблема ушла, спасибо.

А как быть со второй?
Я много читал про setChildIndex и addChildAt , но не нашёл варианта как бы его применить так.

анимация начинается с первой картинки и прогрессбара.
анимация прогресса проходит, по завершении начинается высчитывание старой и новой картинок, точнее ставятся идентификаторы.
проще кодом
Код AS3:
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);//запуск функции анимирования
 
}
а вот ниже код анимации:
Код AS3:
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. Причина: добавка
Старый 01.02.2012, 23:32
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Хочу дать один совет на будущее. Всегда заменяйте конструкции типа loadedImages[nowId].img простой ссылкой, если обращение производится несколько раз. Потому что плеер каждый раз поизводит полный поиск - ищет свойство loadedImages, ищет у него свойство nowId, ищет у него свойство img. Лучше создайте переменную и запишите в нее ссылку на экземпляр или свойство (если оно не простое конечно)
Код AS3:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
Глубина , массив , спрайт
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:35.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.