Доброе время суток. Я с технологией 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. Все узлы повторяются, по этому нет смысла занимать лищнее место
Может кто сталкивался с такой проблемой? Как сделать так, чтобы по ссылке сожно было перейти, не дожидаясь окончания загрузки ролика?
Буду рад любой помощи