Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ссылки на странице срабатывают только после полной загрузки swf (http://www.flasher.ru/forum/showthread.php?t=123978)

n00 17.04.2009 13:15

Ссылки на странице срабатывают только после полной загрузки 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. Все узлы повторяются, по этому нет смысла занимать лищнее место :)

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

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

willis83 17.04.2009 21:09

Код большой, никто без камментов разбираться не будет... отдельно функции ясно, но сидеть разбираться лень. Повставляйте камменты, может чем и помогли бы. Вы похоже перешли с другого языка т.к. некоторые повороты не понятны. Вот например зачем функцию xmlLoadComplete в конструктор вставили? И какие именно ссылки не работают? Листенеров на клики не нашел, а разбираться лень

dimarik 18.04.2009 02:12

По рукам бы, по рукам линейкой =) за такой код.

n00 20.04.2009 11:35

Извините, в выходные к инету доступа не было. Щас расставлю все комменты. :)

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


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

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