суббота, 5 февраля 2011 г.

Preloader (прелоадер) для игр на AS3.

Preloader (прелоадер) для игр на AS3.:
'Не пустят на банкет, когда прелоадера нет!'



Всем привет!
Это снова я, со своей писаниной! :)

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

Прелоадер предназначен для наглядного представления процесса загрузки флешки. Чтобы пользователь видел, что браузер у него не повис и флешка медленно, но верно закачивается. А ушлые предприниматели еще и рекламу в нем показывают, так что вещь весьма полезная и необходимая.



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


Разделим прелоадеры на два класса:
  • Внешние
  • Встроенные

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

Внешние прелоадеры я не буду рассматривать (там все не так просто из-за системы безопасности), скажу лишь, что нужно использовать образец класса flash.display.Loader и после того, как внешняя флешка будет загружена, прикрепляете этот образец к stage. Загруженная флешка будет чем-то вроде клипа.

Давайте лучше остановимся на встроенных прелоадерах, они более актуальны для игр.

*** 

Встроенный прелоадер - это класс или алгоритм (если написан внутри кадров FlashIDE) контролирующий процесс загрузки SWF файла и определенным образом показывающий пользователю прогресс в загрузке. 
Но реализацию прелоадера мы не можем рассматривать, пока не разберемся в структуре SWF файла (что собственно грузим, то?).

Давайте одним глазком заглянем под капот SWF файла.
  • Первое, что нам нужно знать - SWF файл состоит из множества тегов (Tags) идущих друг за другом. Каждый тег содержит кусочек данных (описание клипа, код класса, команда плейеру).
  • Второе, что мы должны знать - теги грузятся пачками и разделяют эти пачки контрольные теги ShowFrame.
Структура SWF файла

При инициализации тегов ShowFrame плейер помещает загруженную порцию клипов в рендеринг конвейер и инициализирует загруженные классы (например, класс-документ), а потом ожидает команды на загрузку следующей пачки тегов и обрабатывает события.

Из сказанного выше мы делаем вывод - флешка грузиться поэтапно и в конце каждого этапа мы можем выполнить определенные действия [...]

понедельник, 31 января 2011 г.

/* Закомментированные хитрости */

/* Закомментированные хитрости */: "

Пишет Dan:
Счастливые родители:

// - однострочный комментарий, компилятор игнорирует все остальные символы до конца строки
/* - начало многострочного комментария, компилятор игнорирует все символы пока не встретится
*/ - конец многострочного комментария

Разномастные дети:

//* - однострочный комментарий, который можно превратить в начало многострочного удалением одного слеша
/**/ - безопасный конец многострочного комментария: даже если не было начала, то не будет ошибки компиляции
/*/ - или начало, или конец многострочного комментария, по обстоятельствам

читать далее [...]

вторник, 25 января 2011 г.

Политика безопасности во Flash Player. Наиболее частные столкновения.

Политика безопасности во Flash Player. Наиболее частные столкновения.:

Часто вы сталкивались с ситуацией, когда ваш код не работает по непонятным причинам? Вам кажется, что всё уже проверено сотни раз и вы с уверенностью говорите себе, что здесь нет ошибок, и уже готовы биться головой о клавиатуру :) Спешу вас утешить, скорее всего ошибка не в коде.

В чем же дело?

А дело может быть в том, что вы нарушаете политику безопасности Flash Player, сами того не зная. Иногда Flash Player просто промолчит об этом :)

Как это предупредить?


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

В этом посте я хочу рассказать о наиболее частых нарушениях политики безопасности, с которыми мы сталкиваемся.

Загрузка контента с доменов отличных, о того с которого запущена страница с .swf-файлом

*.load();

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

BitmapData.draw();[...]

суббота, 22 января 2011 г.

UAFPUG №25 в Николаеве, 12 февраля: поговорим о флэш-сайтах

UAFPUG №25 в Николаеве, 12 февраля: поговорим о флэш-сайтах:

Друзья, поздравляем вас с Удачным Завершением Наступления Нового Почти 2012 Года!

Знаете ли вы, что, пока он наступал, мы не только пытались устанавливать Flash на Android, но также начали заполнять местами и датами календарь мероприятий UAFPUG на ближайший год?

Сообщаем вам, что ближайшая встреча UAFPUG №25 состоится 12 февраля 2011 года в городе Николаеве. И эта встреча будет посвящена созданию флэш-сайтов.

  • Место встречи: уточняется.
  • День: 12 февраля 2011 года.
  • Время: с 11-00 до упаду.
  • Тема: Исскуство создания флэш-сайтов.

Вы спросите: почему именно флэш-сайты, почему именно в Николаеве?

Возможно, у вас возник такой вопрос. Но даже если нет, мы ответим на него. 2011 год будет годом появления множества необычных и интересных флэш-сайтов, и нам нужно как следует подготовиться к этому. Выбор места не случайно пал на Николаев, известный своими славными традициями креативного сайтостроения -- вы помните знаменитый SecondMethod Виталия Онищенко? Вы знаете, что сегодня в Николаеве производят систему MotoCMS для создания Flash-сайтов и управления ими?Можно много еще сказать о том, почему Николаев является столицей флэшового сайтостроения в Украине. Но мы не станем говорить об этом здесь. Лучше поговорим об этом на встрече!

Мы приглашаем всех, кто в теме - прийти и сказать свое слово. Можно послушать слова других. Можно показать свой сайт. Увидеть чужой сайт. Обсудить чужой сайт. Показать чужой сайт. Обсудить свой сайт [...]

пятница, 21 января 2011 г.

FontLoader 2.3

FontLoader 2.3:

Вышла новая версия FontLoader — 2.3!
Наконец-то внедрена поддержка CFF-шрифтов (в теге DefineFont4) для работы FlashTextEngine. Эту поддержку можно было добавить единственной строчкой с ID тега DefineFont4 (91), но мне этого показалось слишком мало, чтобы поднимать версию FontLoader-а.

В ходе сборки библиотек с CFF-шрифтами в Flash CS5 неожиданно выяснилось (по правде сказать, я так и не пощупал FTE до сих пор), что для внедрения требуется библиотека textLayout.swc, которая может быть внедрена непосредственно в swf, либо может загружаться как RSL.

В первом случае кроме излишнего веса конечного swf, проблемы не было — тег DefineFont4 объявлен, шрифт есть, FontLoader пашет как автомат Калашникова. Во втором же случае Flash CS5 создает оболочку-прелоадер и в него внедряет наш swf, используя Embed (он же DefineBinaryData), т. е. в бинарном виде. Прелоадер загружает самого себя, загружает необходимые RSL и выполняет loadBytes внедренного swf. При подобной схеме FontLoader не находит в таком прелоадере шрифтов. В связи с этим, был добавлен рекурсивный анализ тегов DefineBinaryData на предмет наличия там валидного SWF. Проще говоря, теперь FontLoader умеет выдергивать шрифты из embedded-swf вне зависимости от вложенности.

Для подготовки библиотек со шрифтами можно использовать любой инструмент — Flash IDE от пятой версии до последней или Flash/Flex Builder (метатег [Embed]), либо Flex SDK.

Посмотреть демо и скачать примеры с исходниками класса.

TowerDefence #5. Поиск пути

TowerDefence #5. Поиск пути:

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

пятница, 14 января 2011 г.

Осваиваем Flash. Часть 5.

Осваиваем Flash. Часть 5.:

Динозавры на конвейереВсем привет!

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

Без лишних слов, приступим!




Прежде всего, давайте разберемся, чего мы хотим добиться, и что нам для этого понадобится.
Всегда и везде, мы хотим свести наше участие, как программиста, в работе системы к минимуму, предоставив дизайнерам возможность воплощать любые их, даже самые смелые, замыслы, не отвлекая нас от зарубов в Quake. Объекты в нашей программе должны быть максимально самостоятельными, нас не должно волновать ни их количество, ни их тип или детали их функционирования и взаимодействия. Это все конечно в идеале, в жизни все немножко сложнее, но без трудностей было бы просто не интересно.


  • Нам потребуется некоторый универсальный объект на все случаи жизни, таким объектом станет класс S_Node.
  • Для управления этими универсальными объектами нам понадобится менеджер сцены S_SceneManager. 
  • Так как менеджер сцены сам по себе не может хранить объекты, то для этой цели мы опишем менеджера образцов S_InstanceManager и расширим класс S_Node, создав класс S_Instance (потомок класса S_Node). Это связано с тем, что менеджер образцов работает только с объектами типа S_Instance.

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

Давайте остановимся на универсальном объекте S_Node и посмотрим, что он должен уметь. О расширении этого класса - S_Instance поговорим позже, когда доберемся до менеджера образцов [...]