Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание сайта с использованием ас3, разбор полетов. (http://www.flasher.ru/forum/showthread.php?t=121145)

switchfd 09.02.2009 00:55

Создание сайта с использованием ас3, разбор полетов.
 
Я конечно дико извиняюсь, что решил поднять такую детскую тему и понимаю что ей здесь не место :rolleyes: .Если вы ни принимаете мои извинения тогда можете её удалить. :)
Ну а если принимаете тогда поехали:

Как известно любой простецкий сайт во флеше да и в большинстве случаев любой флешовский сайт это флеш ролик с навигацией из кнопок при нажатии на которые в него подгружаются друие ролики.
(мде загнул;)) И так на основной сцене главного мувика. Моожно все "разукрасить" напихать кнопки с навигацией. Создать подгружаемые мувики. Вот все это я сделал а дальше идет вопрос.

Тут в скрипте я начал эксперементировать сподружаемыми мувиками (т.е. страницы : новости, о компании, контакты и т.д.). Так вот меня интересует нужно ли для каждого подгружаемого мувика объявлять переменную? И для оптимизации сайта как лучше сделеать при переходе с странички на страничку лучше делать уже загруженные странички невидимыми, чтобы потом их не пршлось загружать или их отгружать а потом при переходе (нажатии на кнопку) опять загружать?
Если в первом случае есть какие-то мысли ..как написать условия для видимости. Или если ыторой способ лучше то чем. Будут ли загруженные ролики храниться в темпрари.
В общем если вам не понятен мой безумный ббред и вся лирика то скажите как бы сделали вы и если есть исходный код в ас3 поделитесь кому не жалко) А если там будет прелоадер то вообще замечательно)
Когда протрезвею))) объясню все по полочкам):drinks:


Код AS3:

package script {  
    import flash.events.*;
        import flash.display.*;
        import flash.net.URLRequest;
 
    public class menu extends MovieClip {
 
        private var loader:Loader;//Обьявляем переменную
        private var loader1:Loader;//Обьявляем переменную       
 
        public function menu(){
                stop();
 
 
 
        //------- Обработчик вызывает ф-ю  при нажатии
        in_news.addEventListener(MouseEvent.CLICK, clickListener);
        //------- stt- инстанс кнопки
        //stt2.addEventListener(MouseEvent.CLICK, clickListener2);
 
 
        }
 
        private function clickListener(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest("pages/f_news.swf");//Определяем положение файла
 
                loader=new Loader();//Создаем экземпляр класса Loader
                loader.x=200;
                loader.y=300;
                addChild(loader);
                loader.load(url);//Начинаем загрузку       
        }
 
        /* private function clickListener2(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest("SimpleClockApp.swf");//Определяем положение файла
 
                loader1=new Loader();//Создаем экземпляр класса Loader
                loader1.x=500;
                loader1.y=400;
                addChild(loader1);
                loader1.load(url);//Начинаем загрузку       
                loader.visible=false;
                q4.play();
                krr.play();}
 
 
        */

 
 
    }
}

Добавлено через 3 часа 0 минут
Вот переработанный код...
Код AS3:

package script {  
    import flash.events.*;
        import flash.display.*;
        import flash.net.URLRequest;
 
    public class menu extends MovieClip {
 
        private var l_News:Loader;
        private var l_Service:Loader;       
        private var l_Contact:Loader;
        private var l_Group:Loader;
 
        public function menu(){
                stop();
 
 
 
        //------- Обработчик событий
        in_news.addEventListener(MouseEvent.CLICK, news_cListener);
        in_service.addEventListener(MouseEvent.CLICK, service_cListener);
        in_contact.addEventListener(MouseEvent.CLICK, contact_cListener);
        in_group.addEventListener(MouseEvent.CLICK, group_cListener);
 
        }
 
        private function news_cListener(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest("pages/f_news.swf");
 
                l_News=new Loader();
                l_News.x=200;
                l_News.y=300;
                addChild(l_News);
                l_News.load(url);
        }
 
                private function service_cListener(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest("pages/f_service.swf");
 
                l_Service=new Loader();
                l_Service.x=200;
                l_Service.y=300;
                addChild(l_Service);
                l_Service.load(url);
        }
        private function contact_cListener(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest("pages/f_contact.swf");
 
                l_Contact=new Loader();
                l_Contact.x=200;
                l_Contact.y=300;
                addChild(l_Contact);
                l_Contact.load(url);
        }
 
                private function group_cListener(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest("pages/f_group.swf");
 
                l_Group=new Loader();
                l_Group.x=200;
                l_Group.y=300;
                addChild(l_Group);
                l_Group.load(url);
        }
 
 
 
 
 
    }
}

Добавлено через 3 часа 4 минуты
Выглядит очень некрасиво. При том при нажатии на кнопки страница подгружается повторно(. И вообще интересно что лучше помещать в ад чайлд переменную или её контент...Черт выглядит как-то топорно.((

Добавлено через 3 часа 8 минут
покачто... остановился на том чтобы лучший метод это загружать страницы не выгружая их при загрузки новой. Для небольшого сайта это лучше, тем более не уверен остаются ли подргружаемые файлы во временных файлах....поправте меня если я не прав.

Добавлено через 3 часа 9 минут
покачто... остановился на том чтобы лучший метод это загружать страницы не выгружая их при загрузки новой. Для небольшого сайта это лучше, тем более не уверен остаются ли подргружаемые файлы во временных файлах....поправте меня если я не прав.

Добавлено через 3 часа 11 минут
Теперь надо сделать так чтобы проверялось условие: если страница уже загружена при переходе на другую страницу она становилась невидимой.

Gaen 10.02.2009 03:08

Модули лучше выгружать, тк они занимают память и могут грузить порц "забытыми" listener'ами. В любом случае после первой загрузки они останутся в кэше браузера, и после этого не будут скачиваться повторно.

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

switchfd 10.02.2009 16:18

О спс гайкер очень толково объяснил. Но я не совсем понял что значит "забытые" лисенеры? Хотелось бы знать интересно все ли браузеры нормально работают с флешем и кешируют его. Если так то работа упрощается. (Тогда интересует вопрос можно ли как-нибудь ухещириться и написать одну функцию обработки нажатия, а не для каждой кнопки в отдельности?)

Я вот уже начал пробовать делать второй вариант(там будет при переходе на другую страницу, ранее загруженные страницы будет становиться невидимыми. Когда код допишу выложу.

Вообще просто хочу в этом посте более и менее разобраться как грамотно делаются сайты на флеше при этом используя АС3, тем более нигде описания толкового не нашел, а нормальных темплейтов с АС3 днем с огнем не сыщешь.

snipe 10.02.2009 16:55

Цитата:

Сообщение от switchfd (Сообщение 797248)
О спс гайкер очень толково объяснил. Но я не совсем понял что значит "забытые" лисенеры? Хотелось бы знать интересно все ли браузеры нормально работают с флешем и кешируют его. Если так то работа упрощается. (Тогда интересует вопрос можно ли как-нибудь ухещириться и написать одну функцию обработки нажатия, а не для каждой кнопки в отдельности?)

Я вот уже начал пробовать делать второй вариант(там будет при переходе на другую страницу, ранее загруженные страницы будет становиться невидимыми. Когда код допишу выложу.

Вообще просто хочу в этом посте более и менее разобраться как грамотно делаются сайты на флеше при этом используя АС3, тем более нигде описания толкового не нашел, а нормальных темплейтов с АС3 днем с огнем не сыщешь.

Все браузеры работают одинаково с флешем (за исключением очень редких случаев), т.к. обработка SWF происходит в плеере, а не в браузере. Кеширование устанавливает пользователь, может конечно и запретить, но это ОЧЕНЬ редко, поэтому им можно пользоваться свободно. Невидимыми "страницы" лучше не делать, т.к. они продолжают функционировать и грузить проц. Лучше всё-таки выгружать и на это место ставить новый модуль. Так проще работать и более унифицировано. Функцию для обработки нажатия пункта меню можно сделать одну, просто каждая кнопка будет передавать имя, от которого и будет происходить дальнейшие действия.
В общем, под каждую конкретную задачу находится своё решение и описанный выше вариант может не подойти для конкретного проекта.

Gaen 10.02.2009 18:07

По поводу единой функции обработки. Суть в том, чтобы засунуть все кнопки в один мувик и подписаться один раз на его MouseEvent.CLICK вместо того, чтобы подписываться на каждую кнопку. Это удобно, тк при дальнейшем добавлении новой кнопки событие от неё сразу будет долетать до обработчика, и нужно будет только прописать для неё действие.

В вашем случае имеет смысл сделать класс для пункта меню, который будет хранить путь к файлу, который нужно подгрузить. Тогда обработчик действительно будет единым, без всяких ветвлений для каждой кнопки.

Код AS3:

var url:URLRequest=new URLRequest((e.target as MenuItem).contentPath);


switchfd 10.02.2009 20:07

Если я правильно понял всю логику то MenuItem это название мувика куда запихнуты кнопки и для этого же мувика создаем класс тогда у меня получается:
Код AS3:

package script {  
    import flash.events.*;
        import flash.display.*;
        import flash.net.URLRequest;
 
    public class menu extends MovieClip {
 
        private var l_Menu:Loader;
 
        public function menu(){
                stop();
 
 
 
        //------- Обработчик событий
        inMenu.addEventListener(MouseEvent.CLICK, Menu_cListener);
 
 
        }
 
        private function Menu_cListener(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest((e.target as MenuItem).contentPath);
                //var url:URLRequest=new URLRequest("pages/f_news.swf");
                //if (l_Menu==null){
                // l_Menu=new Loader();
                // l_Menu.x=200;
                //l_Menu.y=300;
 
                //addChild(l_Menu);
                //l_News.load(url);
 
                }
 
 
 
    }
}

и дополнительный класс
Код AS3:

package script {  
  //  import flash.events.*;
        import flash.display.*;
        //import flash.net.URLRequest;
 
    public class menucontent extends MovieClip {
 
        public function menucontent(){
 
        inNews.contentPath="pages/f_service.swf";
        inService.contentPath="pages/f_service.swf";
        inContact.contentPath="pages/f_contact.swf";
        inGroup.contentPath="pages/f_group.swf";
        }
 
 
 
 
    }
}

Добавлено через 2 минуты
Но компилятор матюкается : 1120: Access of undefined property MenuItem.

Добавлено через 9 минут
Но компилятор матюкается : 1120: Access of undefined property MenuItem.

Добавлено через 8 часов 20 минут
Если закоментить эту строку
Код AS3:

var url:URLRequest=new URLRequest((e.target as MenuItem).contentPath);

Потом он начинает ругаться что нельзя задать свойство для неопределенного объекта((
Я конечно могу выкрутиться и задать это свойство следующим образом
Код AS3:

package script {  
  //  import flash.events.*;
        import flash.display.*;
        //import flash.net.URLRequest;
 
    public class menucontent extends MovieClip {
 
        public function menucontent(){
        if (parent.getChildByName("inNews")!=null){(parent.getChildByName("inNews") as MovieClip).contentPath="pages/f_news.swf"};
        if (parent.getChildByName("inService")!=null){(parent.getChildByName("inService") as MovieClip).contentPath="pages/f_service.swf"};
        if (parent.getChildByName("inContact")!=null){(parent.getChildByName("inContact") as MovieClip).contentPath="pages/f_contact.swf"};
        if (parent.getChildByName("inGroup")!=null){(parent.getChildByName("inGroup") as MovieClip).contentPath="pages/f_group.swf"};
 
 
 
        }
 
 
 
 
    }
}

Но это какая-то порнуха получается)))0

Добавлено через 20 часов 18 минут
ААА, черт , гайкер ты куда пропал??? Люди добрые помогите. Может у кого нибудь есть добросоистный АС3 скрипт с выгрузкой и загрузкой страниц при переходе по кнопкам.

Добавлено через 26 часов 10 минут
Млин ну все походу дальше этого места не сдвинусь(( Вроде бы столько опытных людей никто подсказать не может(((

Добавлено через 26 часов 56 минут
Мдя... так как помощи больше не было.. вернулся к прежнему варианту...
Код AS3:

package script {  
    import flash.events.*;
        import flash.display.*;
        import flash.net.URLRequest;
 
    public class menu extends MovieClip {
 
        private var l_News:Loader;
        private var l_Service:Loader;       
        private var l_Contact:Loader;
        private var l_Group:Loader;
 
        public function menu(){
                stop();
 
 
 
        //------- Обработчик событий
        in_news.addEventListener(MouseEvent.CLICK, news_cListener);
        in_service.addEventListener(MouseEvent.CLICK, service_cListener);
        in_contact.addEventListener(MouseEvent.CLICK, contact_cListener);
        in_group.addEventListener(MouseEvent.CLICK, group_cListener);
 
        }
 
        private function news_cListener(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest("pages/f_news.swf");
        page_cleaner();
                if (l_News==null){ 
                l_News=new Loader();
                l_News.x=200;
                l_News.y=300;
                addChild(l_News);
                l_News.load(url);
                } else {l_News.load(url);}
        }
 
                private function service_cListener(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest("pages/f_service.swf");
        page_cleaner();
                if (l_Service==null){
                l_Service=new Loader();
                l_Service.x=200;
                l_Service.y=300;
                addChild(l_Service);
                l_Service.load(url);
                }else {l_Service.load(url);}
        }
        private function contact_cListener(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest("pages/f_contact.swf");
        page_cleaner();
                if (l_Contact==null){
                l_Contact=new Loader();
                l_Contact.x=200;
                l_Contact.y=300;
                addChild(l_Contact);
                l_Contact.load(url);
                  }else {l_Contact.load(url);}
        }
 
                private function group_cListener(e:MouseEvent):void{
 
                var url:URLRequest=new URLRequest("pages/f_group.swf");
        page_cleaner();
                if (l_Group==null){
                l_Group=new Loader();
                l_Group.x=200;
                l_Group.y=300;
                addChild(l_Group);
                l_Group.load(url);
                }else {l_Group.load(url);}
        }
 
        private function page_cleaner():void{
                        if ( l_News!=null){ l_News.unload();}
                        if ( l_Service!=null){ l_Service.unload();}
                        if ( l_Contact!=null){ l_Contact.unload();}
                        if ( l_Group!=null){ l_Group.unload();}
                        }
 
 
 
    }
}

Покачто больше ниче не буду выкладывать ибо я параноик:wacko: и мне кажется здесь меньше помогают, а больше скрипты чужие 3.14здят:taunt:

Добавлено через 70 часов 32 минуты
АА ну вот все я совсем отчаялся((

Fergus 14.02.2009 15:08

Никому твои скрипты не уперлись совершенно никуда, будь уверен.

Psycho Tiger 14.02.2009 16:23

Цитата:

Сообщение от switchfd
у кого нибудь есть добросоистный АС3 скрипт с выгрузкой и загрузкой страниц при переходе по кнопкам.

Для каждого подхода свой скрипт. Чтобы очистить дисплей лист:

Код AS3:

while (numChildren) removeChildAt(0);

А дальше уже - для каждого свой подход. Или если 3 переменных тебе хватило для одного сайта - не факт, что для другого хватит 20.

Gaen 14.02.2009 22:18

switchfd стучи сем шесть ноль три пять восем сем


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

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