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

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

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

Регистрация: Sep 2007
Адрес: 52° 31′ N, 13° 24′ O
Сообщений: 55
По умолчанию XML Слайдшоу. Проблема с переходом.

Привет! По событию таймера меняются фотки. У себя дома - все работает превосходно.
Онлайн - нет непрерывности между переходами. Фотка пропадает и через 1-2 сек. появляется новая. После того, как круг пройдет - все нормально.
Подскажите, как можно этого избежать?
Код AS3:
import com.greensock.*;
 
var xmlList:XMLList;
var slideNum:Number = 0;
var imgLoader:Loader = new Loader();
var slideTimer:Timer = new Timer(5000);
var mcLoader:Loader;
var total:Number; 
 
var xml:XML = new XML();
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("images.xml"));
loader.addEventListener(Event.COMPLETE, onComplete);
 
function onComplete(event:Event):void
{
	xml = XML(event.target.data);
	xmlList = xml.children();
	imgText.wordWrap = true;
	imgTitle.text = xml.image[slideNum].@title.toString();
	imgText.text = xml.image[slideNum].@text.toString();
	imgLoader.load(new URLRequest(xml.image[slideNum].@src));
	total = xmlList.length();
	TweenLite.from(imgLoader, 2, {alpha:0});
	imgLoader.x = 0;
	imgLoader.y = 0;
	master_mc.addChild(imgLoader);
}
 
slideTimer.addEventListener(TimerEvent.TIMER, onSlideTimer); // Timer
btnPa.addEventListener(MouseEvent.CLICK, PauseSlide); // Button
btnSt.addEventListener(MouseEvent.CLICK, StartSlide); // Button
 
function changeText(slideNum:Number):void
{
	imgTitle.text = xml.image[slideNum].@title.toString();
	imgText.text = xml.image[slideNum].@text.toString();
	imgLoader.load(new URLRequest(xml.image[slideNum].@src));
	imgLoader.x = 0;
	imgLoader.y = 0;
	master_mc.addChild(imgLoader);
	TweenLite.from(imgLoader, 2, {alpha:0});
}
//--------------------------------------------------------------------- Timer
function onSlideTimer(event:TimerEvent):void 
{
	if (slideNum == total - 2) 
	{
		slideNum = 0;
	}
	else 
	{
		slideNum++ ;
	}
	changeText(slideNum);
}
//--------------------------------------------------------------------- Buttons Commands
function PauseSlide(event:MouseEvent):void
{
	slideTimer.stop();
}
 
function StartSlide(event:MouseEvent):void
{
	slideTimer.start();
}
Спасибо!

Старый 16.03.2010, 05:48
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
подгрузи сначала картинки — мы ж не в Китае =) инет у нас медленный. вот слайды и не поспевают первый раз — ты ж не ждешь загрузки изображения. а второй раз — они уже в кэше и все ок...

UPD
а фотка старая пропадает, потому что у тебя один лоадер на всех. когда ты загружаешь в него новую фотку — старая пропадает (содержимое imgLoader очищается)
другое дело что я теперь не понимаю что у тебя может быть по второму кругу "нормально", если у тебя все равно старая фотка пропадает мгновенно, а новая вылазит фэйдом? разве что ты так и задумывал?
__________________
Поймай яблоко 2!


Последний раз редактировалось Zebestov; 16.03.2010 в 06:01.
Старый 16.03.2010, 18:21
Stanislavsky вне форума Посмотреть профиль Отправить личное сообщение для Stanislavsky Найти все сообщения от Stanislavsky
  № 3  
Ответить с цитированием
Stanislavsky
 
Аватар для Stanislavsky

Регистрация: Sep 2007
Адрес: 52° 31′ N, 13° 24′ O
Сообщений: 55
Цитата:
Сообщение от Zebestov Посмотреть сообщение
подгрузи сначала картинки
Подскажи как правильно это сделать?

Цитата:
Сообщение от Zebestov Посмотреть сообщение
содержимое imgLoader очищается
Как сделать по правильному?)))) СпасибО!

Старый 16.03.2010, 21:19
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 4  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Загрузил картинку - плавно показал ее. Загрузил вторую картинку - плавно показал вторую картинку. Загрузил третью картинку - плавно показал третью картинку. Загрузил,.. надоело печатать, в общем пусть пока три будет. Как только третья, последняя загрузилась, начинаешь их плавно менять через определенный интервал, например через 30 кадров или по таймеру.
__________________
Гоночка

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

Регистрация: Sep 2007
Адрес: 52° 31′ N, 13° 24′ O
Сообщений: 55
Цитата:
Сообщение от Alex Lexcuk Посмотреть сообщение
Загрузил картинку - плавно показал ее. Загрузил вторую картинку - плавно показал вторую картинку. Загрузил третью картинку - плавно показал третью картинку. Загрузил,.. надоело печатать, в общем пусть пока три будет. Как только третья, последняя загрузилась, начинаешь их плавно менять через определенный интервал, например через 30 кадров или по таймеру.
?
1. загрузил, плавно показал первую
2. загрузил, плавно показал вторую
...
*. как только последняя загрузилась, начинаешь плавно менять

не понял. т.е. "плавно показать" и "менять" - разные действия? Вы уверены?

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
я бы сделал так:
1. загрузил первую,
2. показал ее,
3. запустил таймер с нужным интервалом,
4. таймер сработал,
5. проверяем загрузилось ли след. изображение,
5.1 если да, -> 2.
5.2 если нет ждем окончания загрузки и потом, -> 2.

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

Регистрация: Sep 2007
Адрес: 52° 31′ N, 13° 24′ O
Сообщений: 55
А можно ли как-нибудь сразу все загрузить?

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
сразу все?
ну если вам грузить 10 изображений и они маленькие, то конечно, дождаться пока они загрузятся, а потом их отображать.
но а если их может быть 20, 50? зачем ждать пока такое кол - во загрузится, чем вам не подходит, то что описали выше? с нормальной скоростью соединения, а так я думаю почти везде, все будет выглядеть, как будто у вас все загружено, ну если конечно интервал между показом не мс.

Старый 17.03.2010, 01:15
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 9  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
>>не понял. т.е. "плавно показать" и "менять" - разные действия? Вы уверены?
Я не не понял чего вы непоняли, тот пункт, где понимать ничего не надо.
Я то-ж подумал и дописал вашу галерею, теперь она правльная.
Код AS3:
/*на сцене текстовые поля
titleTxt
infoTxt
progressTxt
и мовиклип на котором будут показываться рисунки
master
*/
import flash.filters.*;
 
var xmlList:XMLList;
var startCount:int = 0;
var imgLoader:Loader = new Loader();
var mcLoader:Loader;
var total:Number; 
var xml:XML = new XML();
var loader:URLLoader = new URLLoader();
var alphaEf:Number = 0;
var стартерРисунков:Boolean;
var паузаМеждуРисунками:int = 4;
var path:String = 'http://www.murmadillo.tut.su/m/d3/';
var bmd:BitmapData = new BitmapData(800,600);
var bm:Bitmap = new Bitmap(bmd);
var пауза:Boolean = true;
master.addChild(bm);
 
titleTxt.filters = [new GlowFilter(0xFFFFFF)];
infoTxt.filters = [new GlowFilter(0xFFFFFF)];
 
 
loader.load(new URLRequest(path+"images.xml?=2"));
loader.addEventListener(Event.COMPLETE, onComplete);
addEventListener(Event.ENTER_FRAME, alphaEffectEnterFrameHandler);
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaderCompleteHandler);
imgLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
 
 
function alphaEffectEnterFrameHandler(e:Event):void{
	if (стартерРисунков&&пауза) {
		imgLoader.alpha = alphaEf+=0.1;
		if (alphaEf>паузаМеждуРисунками){
			alphaEf = 0;
			bmd.draw(imgLoader);
			imgLoader.unload();
			titleTxt.text = xmlList[startCount].@title;
			infoTxt.text = xmlList[startCount].@text;
			imgLoader.load(new URLRequest(path+xmlList[startCount++].@src));
			стартерРисунков = false;
			trace(startCount);
			if (startCount>xmlList.length()-1) startCount=0;
		}
	}
	if (!пауза) progressTxt.text = 'ОСТАНОВЛЕНО';
}
 
function onComplete(event:Event):void
{
	xml = XML(event.target.data);
	xmlList = xml.children();
	titleTxt.wordWrap = true;
	titleTxt.text = xmlList[startCount].@title;
	infoTxt.text = xmlList[startCount].@text;
	imgLoader.load(new URLRequest(path+xmlList[startCount].@src));
	total = xmlList.length();
	imgLoader.x = 0;
	imgLoader.y = 0;
	master.addChild(imgLoader);
	alphaEf = 0;
}
 
function imgLoaderCompleteHandler(e:Event):void{
	imgLoader.alpha = alphaEf = 0;
	стартерРисунков = true;	
	progressTxt.text = 'Загружено';
}
 
function progressHandler(e:ProgressEvent):void{
	progressTxt.text = '%'+(e.bytesTotal/e.bytesLoaded).toFixed(2);
}
 
stopBtn.addEventListener(MouseEvent.CLICK, stopBtnHandler); // Button
startBtn.addEventListener(MouseEvent.CLICK, startBtnHandler); // Button
 
//--------------------------------------------------------------------- Buttons Commands
function stopBtnHandler(event:MouseEvent):void
{
	пауза = false;
}
 
function startBtnHandler(event:MouseEvent):void
{
	пауза = true;
}
http://www.murmadillo.tut.su/m/d3/g.swf
__________________
Гоночка

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

Регистрация: Sep 2007
Адрес: 52° 31′ N, 13° 24′ O
Сообщений: 55
Alex Lexcuk , спасибо! Но все по-другому... честно, сам бы так не смог. Не могу знаешь что сделать? - Чтоб слайдшоу не начиналось автоматически, а с нажатием кнопки startBtn. Пытаюсь сделать, но никак не могу, чтоб первая фотка была загружена. т.е. не пустое окно открывалось, а с фоткой и стояло на паузе. Если не трудно, подскажи. Два дня сижу.
За код спасибо!

Код AS3:
var пауза:Boolean = true;
var пауза:Boolean = false; // я так изменил


Последний раз редактировалось Stanislavsky; 18.03.2010 в 01:10.
Создать новую тему Ответ Часовой пояс GMT +4, время: 11:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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