![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
ALexusB |
![]()
Сообщение
#1
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,587 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Совместно с темой "Разработка на PHP + MySQL" открываю зеркальную тему по Flash (ActionScript 3.0).
Путь в мир Flash лежит через две разные двери: 1. дизайнерский вход, когда в среде самого флэша рисуются на timeline мувиклипы и графика, потом это все кликами через менюхи собирается в некую анимацию и прочие заготовки для скриптинга 2. программистский вход - Flash или вообще Flex - просто среда компиляции, все пишется в коде, графика грузится на лету при запуске или линкуется в компиляции из внешних файлов. Я рисовать не умею, потому тут речь пойдет о двери №2, но линки будут и на рисование в самом флэше, т.к. в идеале нужно уметь все или иметь под рукой друга-художника. Для начала два полезных блога, одинаковой направленности - рецепты от их авторов. С чего начать изучать флэш (и чего по сути и достотчно и далее можно и не читать больше, а только практика и инет форумы) - это две книги издательства O'Reilly и вторая, названия забыл ![]() далее мануаль самого Адоба Тут просто читаем описания нужных там классов и методов и смотрим примеры. Ну и редактор нужен нормальный, т.к. штатный в IDE - фигня. Есть FlashDevelop - Начну я сам с тонкостей. Открыл тут для себя случайно (с переездом хостинга на более дешевый), что во флэш Loader.load() запущенные последовательно делают несколько отдельных каналов в терминах хостинга, то есть лимитируются хостингом (например, 10 каналов с 1 IP адреса). Так флэшка запущенная в окне браузера, работает не как 1 окно, а как 20-40 сразу. И получает обломы в виде ошибки 503 "Файл временно недоступен". То есть, он есть, но "не дам". На полноскоросных, с большими лимитами, хостингах это все не заметно. Так же это актуально для флэшей не "все в одном", а грузящих ресурсы (например ММО игры). Проявления: Флэшка виснет, не получает нужные ресурсы (пустые места, если нет проверок в коде). Требует 3-4 рефреша в браузере, что бы кэш браузера заполнился и тогда она все 100% ресурсов получит уже из него. Вариант - писать пользователям - жмите рефреш 3-4 раза - не вариант ![]() Спасения: 1. Хороший хостинг (хотя и там бывают упирания в потолок, а обнаружить их сложнее, так что это не выход) 2. Делать мало ресурсов, объединяя их в общие толстые файлы-библиотеки, но все равно быть уверенным, что они грузятся последовательно, я не параллельно. Или все сводить к одному файлу без ресурсов вообще. 3. Сделать свой лодер, который будет лимитировать каналы, например, до трех и ждать, когда они освободятся. Очень наглядно работу с ресурсами показывает браузер Firefox с плугином FireBug - там просто на графике (в виде диаграммы Ганта) видно, что и как грузится. Я добился смены графика "все и сразу" на "лесенку" и выживаемость флэшки с первой загрузки. То есть написал свой лодер и кэш внтури самого флэша. Но есть и другие способы. Из переписки со Stormit (автором хитри.ком): Лично я обычно не гружу всё и сразу, а добавляю загрузки в массив и гружу их по очереди. Есть ещё такой лоадер, может будет полезен: |
![]() ![]() |
Warship |
![]()
Сообщение
#2
|
Гроза морей ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: бета-тестер Сообщений: 441 Регистрация: 29-April 07 Из: Прим. край г. Находка Пользователь №: 9,103 ![]() |
В AS3.0 насколько помню нужно юзать ExternalInterface -
Как пример: AS3.0: Код // Устанавливаем функцию, которая будет вызываться при получении данных от JS if(ExternalInterface.available) { try { ExternalInterface.addCallback("processMovieData", onReceiveFromJavaScript); } catch(_error:SecurityError) { trace("A SecurityError occurred: " + _error.message); } catch(_error:Error) { trace("An Error occurred: " + _error.message); } } // Посылаем запрос в JS. if(ExternalInterface.available && Boolean(ExternalInterface.call("isReady"))) { ExternalInterface.call("processPageData", "commandId=scrollTop"); } // Метод, вызываемый при получении данных от JavaScript. private function onReceiveFromJavaScript(_data:String):void { trace(_data); } JS: Код <script type="text/javascript"> var isJSReady = false; $(document).ready ( function() { isJSReady = true; } ); // Функция возвращает логическое значение, которое показывает, доступен ли JavaScript. function isReady() { return isJSReady; } // Функция выполняет отправку указанных данных в флаш-ролик. function sendToActionScript(_data) { if(navigator.appName.indexOf("Microsoft") != -1) { window["flashCanvas"].processMovieData(_data); } else { document["flashCanvas"].processMovieData(_data); } } // Функция, вызываемая при получении данных от флаша. function processPageData(_data) { // _data - строка вида "commandId=someCommand&someParam0=someValue0&someParam1=someValue1 ...". // Парсить ее, получать параметры и делать что угодно с роликом, страницей или вообще отправлять на сервер. // scrollTo(0,0); sendToActionScript(_data + "&status=success"); } </script> По ссылке выше точно такой-же почти пример есть. flashCanvas - ID флаш-объекта со страницы, в который встраивается ролик. Скролить из ролика страницу - это сильно ![]() |
![]() ![]() |
Текстовая версия | Сейчас: 8th July 2025 - 08:35 |