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

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

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

Регистрация: Apr 2009
Сообщений: 2
Question Ссылки на странице срабатывают только после полной загрузки swf

Доброе время суток. Я с технологией Flash работаю недавно. Сегодня я столкнулся с такой проблемой: при переходе на страницу с вставленным falsh роликом не переходиться по ссылкам на странице, пока ролик не загрузиться полностью. Если конкретно, то ролик читает XML и потом добавляет спрайты с загруженными картинками (25 шт.).

Вот исходный код первого AS3 файла

Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.system.*;
	import flash.ui.*;
	import flash.text.TextField;
	import flash.geom.Point;
 
	public class ImagesCloud extends MovieClip {
		private var main:MovieClip;
		private var myXML:XML;
		private var imagesURL:String;
 
		public function ImagesCloud() {
			var _stage:Stage;
			var myXMLURL:URLRequest;
			var myLoader:URLLoader;
			var xmlLoadComplete:Function;
                                 // читаем параметр  xml из flashvars
			imagesURL=this.loaderInfo.parameters['xml'];
			if (imagesURL==null) {
				imagesURL="D:/img_work/home/cloud/imgs.xml";
			}
                                  //настраиваем _stage
			_stage=this.stage;
			_stage.scaleMode=StageScaleMode.NO_SCALE;
			_stage.align=StageAlign.TOP_LEFT;
                                 // создаём функцию-слушателя на загрузку xml
			xmlLoadComplete = 
			function (param1:Event) : void
			{
			    myXML = XML(myLoader.data);
			    init(myXML);
			    return;
			};
                                  // создаём  xml
			myXML = new XML();
                                  // создаём реквест
			myXMLURL=new URLRequest(imagesURL);
                                  // создаём лоадер
			myLoader=new URLLoader(myXMLURL);
                                  // вешаем слушателя на загрузку xml
			myLoader.addEventListener("complete", xmlLoadComplete);
			return;
		}
 
                       // функция инициализации
		private function init(imagesXML:XML):void {
			var imageXML:XML;
			var _thumb:Thumb;
                                  // клип в котором будут находиться все звгруженные картинки
			main = new MovieClip();
                                  // добавляем его в область видимости
			addChild(main);
                                  // переменные длявычисления координат расположения картинок
			var i:int = 0;
			var j:int = 0;
                                  // перебераем все узлы IMAGE из XML
			for each (imageXML in imagesXML.IMAGE) {
                                            // при i = 10 картинку начинаем с новой строки
				if (i == 10) {
					i=0;
					j++;
				}
                                             // создаём новый Thumb (extends Sprite)
				_thumb=new Thumb(imageXML);
                                             // добавляем к главному клипу
				main.addChild(_thumb);
                                             //сдвигаем его в нужную точку
				_thumb.x=40*i
				_thumb.y=40*j;
				i++;
			}
			return;
		}
 
	}
}
а вот второй. Маленькая картинка
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.filters.*;
	import flash.net.*;
	import flash.text.*;
 
	public class Thumb extends Sprite {
		private var _loader:Loader;
		private var _holder:MovieClip;
		private var _node:XML;
 
 
		public function Thumb(image:XML) {
			var _namespace:Namespace;
			var _urlRequest:URLRequest;
			_node=image;
			_holder=new MovieClip  ;
                                  // добавляем чилдрена к объекту класса 
			addChild(_holder);
			_loader=new Loader  ;
                                  // создаём реквест на основе XML. Берём у родителя переданного узла image аттрибут sourcePrefix.
                                  // Склеиваем этот аттрибут с чилдреном SOURCE узла image. Получаем полный путь к картинке.
			_urlRequest=new URLRequest(image.parent().attribute("sourcePrefix")+image.SOURCE.toString());
                                  // Добавляем слушателя для ошибок, которые могут возникнуть
			_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
                                  // Добавляем слушателя, который выполниться сразу же по окончании загрузки
			_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
                                  // загружаем картинку из реквеста
			_loader.load(_urlRequest);
                                  // добавляем загруженную картинку в область видимости
			_holder.addChild(_loader);
                                  // Делаем невидимой
			this.visible=false;
			return;
		}
 
                       // обработчик ошибок
		private function errorHandler(param1:IOErrorEvent) {
			trace("ioErrorHandler: "+param1.toString());
			return;
		}
 
		private function completeHandler(e:Event) {
			var _filter:BitmapFilter;
			var _filters:Array;
                                  // Изменяеем размеры картинки
			if (_loader.width<_loader.height) {
				_loader.height=40;
				_loader.scaleX=_loader.scaleY;
			} else {
				_loader.width=40;
				_loader.scaleY=_loader.scaleX;
			}
                                  // Делаем видимой
			this.visible=true;
			return;
		}
 
 
	}
}
Внедяю swf файл в страницу при помощи библиотеки swfObject2. Вот код

Код:
         <div id="cloud">
        </div>
        <script type="text" src="/scripts/swfobject.js"></script>
        <script type="text/javascript">
            var homeFlashvars = {};
            homeFlashvars.xml = "/flash/imgs.xml";

            var homeAttributes = {};
            homeAttributes.id = "ImagesCloud";
            homeAttributes.name = "ImagesCloud";

            var homeParams = {};
            homeParams.menu = "false";
            homeParams.wmode = "transparent";
            homeParams.swliveconnect = "true";
            homeParams.allowscriptaccess = "always";
            swfobject.embedSWF("/flash/ImagesCloud.swf", "cloud", "630", "630", "9.0.124", "", homeFlashvars, homeParams, homeAttributes);
        </script>
а вот код imgs.xml
Код:
<IMAGES sourcePrefix="http://localhost/img/">
	<IMAGE>
		<SOURCE>1.jpg</SOURCE>
	</IMAGE>
 ...
	<IMAGE>
		<SOURCE>25.jpg</SOURCE>
	</IMAGE>	
</IMAGES>
Сдесь приведён не весь XML. Все узлы повторяются, по этому нет смысла занимать лищнее место

Может кто сталкивался с такой проблемой? Как сделать так, чтобы по ссылке сожно было перейти, не дожидаясь окончания загрузки ролика?

Буду рад любой помощи


Последний раз редактировалось n00; 20.04.2009 в 12:21. Причина: Добавление комментариев
Старый 17.04.2009, 21:09
willis83 вне форума Посмотреть профиль Отправить личное сообщение для willis83 Найти все сообщения от willis83
  № 2  
Ответить с цитированием
willis83
 
Аватар для willis83

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
Код большой, никто без камментов разбираться не будет... отдельно функции ясно, но сидеть разбираться лень. Повставляйте камменты, может чем и помогли бы. Вы похоже перешли с другого языка т.к. некоторые повороты не понятны. Вот например зачем функцию xmlLoadComplete в конструктор вставили? И какие именно ссылки не работают? Листенеров на клики не нашел, а разбираться лень

Старый 18.04.2009, 02:12
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 3  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
По рукам бы, по рукам линейкой =) за такой код.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 20.04.2009, 11:35
n00 вне форума Посмотреть профиль Отправить личное сообщение для n00 Найти все сообщения от n00
  № 4  
Ответить с цитированием
n00

Регистрация: Apr 2009
Сообщений: 2
Извините, в выходные к инету доступа не было. Щас расставлю все комменты.

Добавлено через 31 час 21 минуту
Народ, что никто на форуме не сталкивался с такой проблемой, когда ссылка срабатывает только после полной загрузки контента во flash?

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

Теги
html , swfobject
Опции темы
Опции просмотра

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

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


 


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


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