Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум студии Seaward.Ru _ Как делают игры _ Разработка на Flash (ActionScript 3.0)

Автор: ALexusB Jan 13 2011, 12:06

Совместно с темой "Разработка на PHP + MySQL" открываю зеркальную тему по Flash (ActionScript 3.0).

Путь в мир Flash лежит через две разные двери:
1. дизайнерский вход, когда в среде самого флэша рисуются на timeline мувиклипы и графика, потом это все кликами через менюхи собирается в некую анимацию и прочие заготовки для скриптинга
2. программистский вход - Flash или вообще Flex - просто среда компиляции, все пишется в коде, графика грузится на лету при запуске или линкуется в компиляции из внешних файлов.

Я рисовать не умею, потому тут речь пойдет о двери №2, но линки будут и на рисование в самом флэше, т.к. в идеале нужно уметь все или иметь под рукой друга-художника.

Для начала два полезных блога, одинаковой направленности - рецепты от их авторов.
http://xitri.com/ - отличная визуализация объяснений в виде интерактивных флэш-перезнаций
http://www.anegmetex.com/devblog/ - много трюков и историй паблишинга готовых игр

С чего начать изучать флэш (и чего по сути и достотчно и далее можно и не читать больше, а только практика и инет форумы) - это две книги издательства O'Reilly
http://www.books.ru/shop/books/538001
и вторая, названия забыл smile.gif Они оч позхожи и на 90% пересекаются, но вторая идет последовательно, как ставить и начать.

далее мануаль самого Адоба
http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/all-index-Symbols.html
Тут просто читаем описания нужных там классов и методов и смотрим примеры.

Ну и редактор нужен нормальный, т.к. штатный в IDE - фигня.
Есть FlashDevelop - http://www.flashdevelop.org/community/


Начну я сам с тонкостей.

Открыл тут для себя случайно (с переездом хостинга на более дешевый), что во флэш Loader.load() запущенные последовательно делают несколько отдельных каналов в терминах хостинга, то есть лимитируются хостингом (например, 10 каналов с 1 IP адреса).
Так флэшка запущенная в окне браузера, работает не как 1 окно, а как 20-40 сразу.
И получает обломы в виде ошибки 503 "Файл временно недоступен". То есть, он есть, но "не дам".
На полноскоросных, с большими лимитами, хостингах это все не заметно. Так же это актуально для флэшей не "все в одном", а грузящих ресурсы (например ММО игры).

Проявления:
Флэшка виснет, не получает нужные ресурсы (пустые места, если нет проверок в коде). Требует 3-4 рефреша в браузере, что бы кэш браузера заполнился и тогда она все 100% ресурсов получит уже из него.

Вариант - писать пользователям - жмите рефреш 3-4 раза - не вариант smile.gif

Спасения:
1. Хороший хостинг (хотя и там бывают упирания в потолок, а обнаружить их сложнее, так что это не выход)
2. Делать мало ресурсов, объединяя их в общие толстые файлы-библиотеки, но все равно быть уверенным, что они грузятся последовательно, я не параллельно. Или все сводить к одному файлу без ресурсов вообще.
3. Сделать свой лодер, который будет лимитировать каналы, например, до трех и ждать, когда они освободятся.

Очень наглядно работу с ресурсами показывает браузер Firefox с плугином FireBug - там просто на графике (в виде диаграммы Ганта) видно, что и как грузится.
Я добился смены графика "все и сразу" на "лесенку" и выживаемость флэшки с первой загрузки.
То есть написал свой лодер и кэш внтури самого флэша.

Но есть и другие способы. Из переписки со Stormit (автором хитри.ком):
Лично я обычно не гружу всё и сразу, а добавляю загрузки в массив и гружу их по очереди.
Есть ещё такой лоадер, может будет полезен: http://code.google.com/p/bulk-loader/

Автор: ALexusB Jan 18 2011, 00:05

Тема: Таймеры
Есть во флаше три способа таймеров
1. Класс Timer - можно задавать повторы
2 метод setTimeout (и соседние по останову)
3 Обновление кадра (считать кадры, переводить во время)

первые два ИМХО одинаковые, видимо метод ядровый, а класс поверх него.
В начале я юзал п1, потом, когда нашел, п2 и только его - удобнее в разы, не нужно new делать. Хотя по документации как раз setTimeout - рудимент.
Оба таймера врут с точностью до 50мс, по сути до 1 кадра. Со времен ДОС читал книжки, что время в ПК считается в "тиках". 1 тик = 1/18 сек. Так что это 0.055 или 55 в терминах таймера. Потому выше точности и не должно быть архитектурно. Если погуглить, то есть статьи с замерами погрешности, ссылки не сохранял.

Способы 1-2 имеют ограничения - они плюют на .stop() анимации, то есть выполнятся по таймеру и все тут.

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

Автор: ALexusB Feb 10 2012, 21:57

http://www.3dnews.ru/software-news/624310
Некая общая тенденция с неподдержкой флэша на иПадах, а теперь еще и Андройд
.... "Таким образом, можно сделать вывод, что эра Flash-технологий неуклонно движется к концу."
грустно - нафиг тогда ее (технологию флэш) развивать вообще дальше?
Это при том, что в Unity 3.5 появилась кнопочка с сохранением во флэш (или флэш плеер стал юнити поддерживать, не вник)

Автор: Commandor_S Feb 11 2012, 10:11

Цитата(ALexusB @ Feb 10 2012, 20:57) *

http://www.3dnews.ru/software-news/624310
Некая общая тенденция с неподдержкой флэша на иПадах, а теперь еще и Андройд
.... "Таким образом, можно сделать вывод, что эра Flash-технологий неуклонно движется к концу."
грустно - нафиг тогда ее (технологию флэш) развивать вообще дальше?
Это при том, что в Unity 3.5 появилась кнопочка с сохранением во флэш (или флэш плеер стал юнити поддерживать, не вник)

Ну и ладно. О том, что флэш умирает говорить рано. Просто мобильные платформы его не будут поддерживать... да и не очень то хотелось, всё ж таки флэш дофига ресурсов жрёт (как для мобильных). Просто нужно будет либо ещё одну еденицу в штат вводить либо увеличивать работу програмеру на пятом ХТМЛе. Делов то.
С другой стороны, стоимость разработки на флэш упадёт. Тут с какой стороны посмотреть: Хозяину выгодно, работнику не очень. dry.gif smile.gif


З.Ы. Если разобраться: Человек учил-учил флэш... хоп, а он нафик никому не нужен. Будь добр переучивайся. smile.gif

Автор: InkyFreeman Feb 11 2012, 20:30

как это понимать книги по Флешу - выбрасывать что ли,,,,

Автор: ALexusB Feb 11 2012, 21:08

Книги? жечь и плакать! wink.gif

Мне ActionScript 3 оч понравился, как язык и подход - реально современно и не C# и не Ява
Не думаю, что его выкинут, останется как Flex или сольется куда (в туже Юнити, как третий скриптовый язык)
Флаш реально жрет ресурс, что не тянули на мобилках

Относительно "нужно переучиваться" - это везде так.
Привыкли, что Ява и С++ вечны с 80х годов.
А вот 1С 8х версий кипит и булькает и народ там фигеет от каждого обновления.
У Микрософта в ее Dynamics линейке не лучше - я вот на реальном распутье карьерном сча - мне что след версию изучать, что любую другую систему - один фиг, оч сильно все поменяли, уже не совместимо с мозгами (потому для полноты понимания поизучал 1С 8.2 с ее управляемыми формами и узнал, что почти все конфигурации все еще на "старых" формах - о как, технология все еще не используется)
Так что, для меня это, как некая амнистия даже - соскочил с 10 летней иглы, можно оглянуться и вообще выбрать что-то другое (в те же игрушки пойти с концами, тк сча там денег как в ERP системах стало - за счет легких и больших соц доходов)

А вот Юнити оч круто шагнула, кто на него поставил, тот угадал - и спрос уже как на флешеров и перспективы, тк кроссплатформер и развивается бурно.
Всякие геймбрио Юнити уже точно уделала по возможностям (и это все сетевое и в браузере может работать!)

Автор: navy Feb 15 2012, 12:08

Цитата
Флаш реально жрет ресурс, что не тянули на мобилках

И не только на мобилках smile.gif порой комп загибается....

Дело в том, что есть HTML5, который легче быстрей и проще чем Flash. Та же ситуация и с SilverLight, а он мне нравился больше, ибо не тормозной. Хотя заморочки те же.
вот примеры HTML5
http://habrahabr.ru/blogs/webdev/97443/

Сам сейчас на распутье... есть много интересных идей, и одну я сейчас активно разрабатываю.... Все же на мой взгляд дело за WEB. Даже 1ц уже прикрутили веб-морду.

Автор: djfc Mar 6 2012, 21:51

Ребят помогите не могу сделать кнопку по типу как в контакте "вверх",проблема в том что кнопка должна быть на action script 3.0 а сам сайт на html

Автор: ALexusB Mar 6 2012, 22:49

вконтакт не пользовал, но суть такая
делаешь кнопку, как тебе нравится (анимированную, интерактивную) на флаше, потом ее обрабатываешь внутри div в хтмл на яваскрипте, если она там как-то еще ползать должна по хтмл странице
Внутри кнопки на прерывании наведения, нажатия вешаешь нужные обработки.

Самое простое - это посмотреть, как именно работает нужное тебе.
Код весь этот открыт, изучи ХТМЛ этой страницы с кнопкой, скачай по ссылкам из исходника страницы .js, что в нем подгружаются и их изучи.
Скачай саму флашку (по ссылке в исходнике), если нужно, то и ее код можно изучить.

Пойми идею и сделай все аналогично.

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

Автор: djfc Mar 10 2012, 23:23

Вот смотрите у меня есть js кнопка при нажатии на которую скролл бар становиться вверх все нормально,но мне нужно чтоб кнопка была flash и при нажатии на неё срабатывал js,читал про взаимодействия action script 3.0 и java script ну ничего подходящего мне не нашел
Вот сам скрипт

Код
<form>
<p align="center" object
<button  type="" onClick="scrollTo(0,0); return false;"  height="30" width="30"> <img src="vverh.png" alt="Вверх">
    <a ></a><td>
    </button>  
    
    </p align="center" object>
    <br>
    </br>
        
</form>

Автор: Warship Mar 11 2012, 05:42

В AS3.0 насколько помню нужно юзать ExternalInterface - http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html

Как пример:
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 флаш-объекта со страницы, в который встраивается ролик.

Скролить из ролика страницу - это сильно smile.gif

Автор: Quatermain Sep 15 2012, 17:33

Вот моя первая игрушка http://www.playground.ru/flash/shot/zvezdnie_voyni_istoriya_povstantsa-12561/

Автор: InkyFreeman Sep 15 2012, 17:58

ну, типа с учебника . Хотя и это похвально.

Автор: ALexusB Dec 20 2012, 20:58

Грустные вести:
Флаш плеер не работает на Андройд 4.1
http://habrahabr.ru/post/146755/

И вроде даже Виндовс 8 и в браузере ИЕ 10 (линк потерял на статью)
Все, все его гнобят! sad.gif
Поставить на Андройд 4.1 флаш все еще можно http://4pda.ru/2012/07/30/67533

Рынок, однако, решили выпихнуть и сами нишу занять.
При этом сам Адоб тоже забил на это, но не на сам флаш.
Развивается среда флаш AIR
И, о чудо, даже на иФоны\Пады и гуглфоны все работает.

http://habrahabr.ru/post/128846/ - крайне полезная статья для разработки под мобилы

А теперь новость радостная (интересная):
известная игра Машинариум, сделанная на флаше, занимала топовые места в аппл сторе для иПад2
То есть, флаш игры на иОС все ж возможны.

Автор: ALexusB Dec 25 2012, 22:56

занялся конвертацией моей проги-говоруна для телефона.
http://www.seaward-online.ru/files/ABC/talker.swf

Столкнулся с проблемой вставки кучи ресурсов внутрь флашки (там 263 файла мр3)

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

Можно написать на самом флаше скрипт, который вернет в трайс() код для вставки в код (тем более у меня все звуки описаны в ХМЛ, то есть циклом можно пройтись)

[Embed(source="../RESOURCE/Sounds/Interface/click.mp3")]
public static var SndClick:Class;

Но такой подход приводит к двум вещам:
1. Для компиляции из Флаша нужен Flex SDK, его нужно ставить или из Flash Buildera взять (ссылку на его путь)
2. все грузится в первом кадре, то есть прелодер не работает, пока не загрузится все и сразу

Как победить прелодер нашел статью (оч полезна, в конце есть пост с теорией)
http://www.flasher.ru/forum/archive/index.php/t-156991.html

Но пока не проделал, тк мне милее способ, который хочу попробовать, нужно на втором кадре разместить клип, подсунуть ему класс мой. И вот в этот клас уже эмбедить все звуки.
Тогда по идее клип загрузится именно в конце, а прелодер в первом кадре сразу.

Но и путь из статьи хорош (если в флашке 1 кадр)

=====
Особенность встройки ХМЛ, нужно писать
[Embed(source="../RESOURCE/XML/SoundVoice1.xml", mimeType="application/octet-stream")]
public static var xmlTest1:Class;
Иначе трактуется неверно и данных в нем нет

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)