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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.06.2011, 12:52
intrdr вне форума Посмотреть профиль Отправить личное сообщение для intrdr Найти все сообщения от intrdr
  № 1  
Ответить с цитированием
intrdr

Регистрация: Feb 2008
Сообщений: 47
Question Slideshow with timer

Добрый день!

Есть набор картинок. Задача: сделать slideshow. Через определённый промежуток времени картинки сменяют друг друга, появляясь из непрозрачности.

Пытаюсь реализовать это без использования timeline.

Исходник явно не совершенен, и явно можно было сделать куда грамотнее, но у меня получилось так. проблема в том, что он не реагирует на строчки:...



Код AS1/AS2:
 
c = 4; //количество картинок 
count = 0; //счётчик для таймера
A = 1; //переменные для объектов
B = 2;
 
// прячем лишние картинки (все кроме первой)
for (i = 2; i < c; i++){
	curClip = this["obj"+i];
	curClip._alpha = 0;
	trace (curClip);
}
 
 
pause = function () {
	if (count == 200){
		curClip1 = this["obj"+A]; //в этом месте не происходит ассоциация с нужной картинкой
		curClip2 = this["obj"+B]; //ну и здесь, естественно тоже самое...
		count = 0;
		curClip1._alpha = 0;
		curClip1.swapDepths(curClip2);
		trace (curClip1);
		if (A < c){
			A ++;
		}
		else {
			A = 1;
		}
		if (B < c){
			B ++;
		}
		else {
			B = 1;
		}
 
	}
	count ++;
	curClip1._alpha ++;
 
//clearInterval(pausei);
}
 
pauseSwap = setInterval(pause, 5);
Почему не происходит ассоциация с картинками внутри функции?

Или может есть куда более правильный способ?

Заранее спасибо!

Старый 06.06.2011, 13:12
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Вот здесь вставьте трейс:
Код AS1/AS2:
pause = function () {
      trace(this);
И посмотрите, что он выведет.
Увидите, что this в данном случае не ссылается на нужный объект, в котором расположены картинки.

Замените this на _root, если у вас все ваши ["obj"+A] и ["obj"+B] находятся прямо на нем. Либо замените на тот контейнер, где они находятся.

Либо вот такое решение, более корректное и универсальное:
Код AS1/AS2:
pause = function (cont:Object) {
	if (count == 200){
		curClip1 = cont["obj"+A]; 
		curClip2 = cont["obj"+B];
....
}
 
pauseSwap = setInterval(pause, 5, this);
То есть ссылку на текущий таймлайн (this), где у вас контейнеры с картинками, передаем аргументом в подинтервальную функцию.

И замените имя функции, pause - служебное слово.
__________________
Идите первым!


Последний раз редактировалось mooncar; 06.06.2011 в 13:49.
Старый 06.06.2011, 14:19
intrdr вне форума Посмотреть профиль Отправить личное сообщение для intrdr Найти все сообщения от intrdr
  № 3  
Ответить с цитированием
intrdr

Регистрация: Feb 2008
Сообщений: 47
Огромное спасибо! Именно так как надо.

Но тетерь стало очевидно, что .swapDepths работает не так как ожидалось.

Слегка изменил код, вот что в итоге получилось:

Код AS1/AS2:
c = 3;
count = 0;
A = 1;
B = 0;
 
for (i = 1; i < c; i++){
	curClip = this["obj"+i];
	curClip._alpha = 0;
	//trace (this);
}
 
 
mPause = function (cont:Object) {
	if (count == 200){
		//trace (this);
		curClipA = cont["obj"+A];
		curClipB = cont["obj"+B];
		count = 0;
 
		curClipA.swapDepths(curClipB);
		curClipA._alpha = 0;
 
 
		trace (curClipA);
		trace (curClipB);
		trace ("----------")
		if (A < c-1){
			A ++;
		}
		else {
			A = 0;
		}
		if (B < c-1){
			B ++;
		}
		else {
			B = 0;
		}
 
	}
	count ++;
	curClipA._alpha ++;
 
//clearInterval(pausei);
}
 
pauseSwap = setInterval(mPause, 5, this);
Но глубина не переходит последовательно от прошлой картинки к следующей...

Старый 06.06.2011, 14:47
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Глубина - это дискретное состояние. Она принимает конкретное значение, определяющее расположение объекта по виртуальной Z-координате.
Честно говоря, сейчас подробно смотреть, как у вас и что меняется, не могу, вот вам инструмент, им воспользуйтесь для того, чтобы смотреть, где что находится в какой момент:
Код AS1/AS2:
trace(mc.getDepth())
чтобы посмотреть, на какую глубину у вас что встает.
__________________
Идите первым!


Последний раз редактировалось mooncar; 06.06.2011 в 14:49.
Старый 06.06.2011, 16:23
intrdr вне форума Посмотреть профиль Отправить личное сообщение для intrdr Найти все сообщения от intrdr
  № 5  
Ответить с цитированием
intrdr

Регистрация: Feb 2008
Сообщений: 47
Спасибо за наводку.
В итоге сделал через
Код AS1/AS2:
curClipA.swapDepths( cont.getNextHighestDepth() );

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
slideshow , timer
Опции темы
Опции просмотра

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

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


 


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


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