Показаны сообщения с ярлыком уроки. Показать все сообщения
Показаны сообщения с ярлыком уроки. Показать все сообщения

четверг, 31 мая 2012 г.

Мантры о системах частиц - Particle systems in Flash

Мгновение, застывшее во времени!

Ниже вы можете ознакомиться с несколькими статьями о создании системы частиц для Flash. Эти статьи я уже выкладывал в сеть и довольно давно, потом они пропали и вот, я решил сдуть с них пыль и вернуть на место. 

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

Приятного ознакомления с материалом. :)

PS: Извиняюсь, за мудацкий способ встраивания флешек в текст этой статьи. Но бесплатный sites.google, где я храню SWF файлы, напрочь отказывается предоставлять к флешкам доступ без этой дурацкой процедуры с кликом по ссылке.

PPS: Оказалось пользователям Internet Explorer повезло еще меньше :) Если у вас белые окошечки вместо флешек, то пока вариант только один: качните архив по ссылке и внутри найдете swf файлик, который можно посмотреть локально на компе.

Читать дальше: Мантры о системах частиц - Particle systems in Flash

суббота, 24 марта 2012 г.

Как рассказать про вашу игру

Автор оригинальной статьи — Тим Фрэнсис, журналист английского издания PC Gamer, в свободное время занимающийся разработкой indie-игр

В повседневной жизни я — игрожур, но на досуге я сам пишу одну игру (Gunpoint), она даже вышла в финал Independent Games Festival, я немного горжусь этим (до меня выступал создатель Solipskier, объяснявший, почему всем наплевать на IGF, так что мне стало немного легче). Это моя первая игра, к тому же ещё недописанная, поэтому учить вас программированию мне не по статусу. Вместо этого я хочу поговорить о том, как рассказывать о играх. С этим легко накосячить, особенно когда вы находитесь в контексте игры; но описанию нужно уделять большое внимание, если вы не хотите остаться единственным пользователем. Мне повезло — за восемь лет я натренировался рассказывать о чужих играх, так что со своей всё пошло легче.

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

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

пятница, 23 марта 2012 г.

TheMiner и FlashDevelop

В этом руководстве речь пойдёт о TheMiner‘е (отличный Flash профайлер) и о FlashDevelop‘е (лучшая и бесплатная среда разработки для Action Script / haXe), соответственно подразумевается, что вы с ними знакомы и желаете использовать их совместно. Если не знакомы — рекомендую ознакомиться.
Всего есть два пути использования TheMiner во FlashDevelop:
- Используя TheMiner SWC, как любую другую внешнюю библиотеку.
- Добавляя TheMiner SWF в список профайлеров FlashDevelop.
Почему существует два пути? Потому что у каждого есть сови преимущества и недостатки, и, в зависимости от обстановки, тот или иной путь может оказаться наиболее подходящим.
Итак, давайте попробуем оба пути шаг-за-шагом. Пожалуйста запустите FlashDevelop и откройте \ создайте в нём as3 проект чтобы продолжить.

TheMiner в качестве внешней SWC

1. Для начала, купите TheMiner или скачайте бесплатную версию для некоммерческого использования.
2. Распакуйте скачанный архив, зайдите в папку «SWCs» и выберите подходящую версию (в зависимости от требуемого языка), например TheMiner_en.swc [...]
Читать дальше: TheMiner и FlashDevelop

пятница, 9 марта 2012 г.

Упакованный SWF. Как распаковать?

Привет, друзья!
В этом посте я хотел бы рассказать о том, что из себя представляет упакованный SWF и как его можно распаковать динамически и статически.
Итак, что же такое упакованный SWF?
Если Вы никогда ранее его не видели, не поленитесь скачать простой классический пример упакованного SWF:
http://codestage.ru/files/flood/security/packed.swf
Запустив SWF, вы увидите немного текста в левом верхнем углу. Однако, если вы попробуете декомпилировать этот файл, то вы не увидите кода, который этот текст показывает.
Стоит отметить, что если бы в упакованном SWF были ещё какие-нибудь ресурсы (изображения, звуки, шрифты и т.д.), то их вы бы тоже не увидели. Это из-за того, что оригинальный SWF находится внутри того SWF что вы скачали и декомпилировали, и часто в зашифрованном виде.
Обычно все, что вы можете получить из таких SWF с помощью декомпиляторов — это код распаковщика\расшифратора и, возможно, сам зашифрованный SWF в виде набора байт (зависит от того, умеет ли используемый вами декомпилятор отображать тэг DefineBinaryData).
Такая «упаковка» на самом деле достигается с помощью простого Flex тэга [Embed].

Динамическая распаковка (dumping)

Динамическая — значит для распаковки потребуется исполнение SWF во Flash Player’е (далее — FP).
Т.к. FP не умеет проигрывать зашифрованную неведомо как SWF, то логично что перед проигрыванием, SWF должна расшифровываться и загружаться уже в чистом виде (например, с помощью Loader.loadBytes()).
Что более важно, распакованный и расшифрованный SWF будет в памяти все время, пока он исполняется FP’ром.
И это наш шанс достать его!
Существует два основных способа сделать это.
1) Динамическая распаковка с помощью утилит
Используя сторонние или даже самописные утилиты для поиска SWF в памяти процесса FP. Это самый быстрый, самый простой и обычно самый эффективный способ. Но он не вызывает ощущения что вы — тру крякер ;)
Существуют различные платные и бесплатные утилиты для этих целей.
Одна из наиболее продвинутых — это SWF Revealer, бесплатная утилита для владельцев лицензий на ASV. В некоторых случаях, она может обходить проверки на домен (которые не дают распаковаться и расшифроваться SWFке) и заставлять SWF запускаться в вашей среде.
Также достаточно легко гуглятся разные бесплатные дамперы.
2) Ручная динамическая распаковка
Поиск SWFки вручную, с помощью нахождения CWS (сжатый SWF) или FWS (несжатый SWF) заголовков, которые являются началом любого SWF. Если вы никогда не пробовали такой способ, я очень рекомендую попробовать! Он не только позволит немного подтянуть ваши скиллы в hex, но и подарит вам ощущение, что вы тру-крякер!)
Для поиска заголовков можно использовать любой HEX редактор, который умеет читать память процессов и имеет функцию поиска.
Если вы хотите искать упакованный SWF в памяти FP в котором проигрывается файл-пример по ссылке выше, то стоит начать с поиска FWS подписи (несжатый SWF) — просто ищите строку ‘FWS’, т.к. перед исполнением FP разжимает SWF, если он был сжат.
Если вы будете запускать и искать SWF в браузере, то закройте все лишние вкладки, чтобы снизить количество лишних SWF в памяти.
Обычно при таком поиске вы найдете несколько заголовков в памяти, т.к. сам FP держит там разные служебные SWF, например ту, что показывается после входа в полноэкранный режим.
Так что если вы сомневаетесь, то лучше проверить все найденные заголовки.
Итак, что же делать с найденным заголовками, спросите вы? Как их проверить, как узнать, где заканчивается SWF?
Пожалуйста, взгляните на этот скриншот:

Это заголовок одной из SWF в памяти FP при проигрывании файла-примера, найденный поиском по строке ‘FWS’ (совершенно случайно это оказался заголовок искомого упакованного файла, который мы и хотим найти ;) )
Что же дальше? А дальше необходимо посмотреть какой длины получается найденный SWF. Длина расположена в 4 байтах начиная с 4го: [...]

Читать дальше: Упакованный SWF. Как распаковать?

среда, 7 декабря 2011 г.

Сохранение звука с микрофона на ActionScript 3.0

То, что недавно казалось фантастикой, сегодня уже реальность. Начиная с версии FlashPlayer'a 10.1 у класса Microphone появилось событие sampleData.

SampleDataEvent
Это событие отправляется когда в буфере микрофона появляются аудио-данные. Событие имеет свойство data, которое содержит образцы записанных с микрофона данных. Естественно данные приходят в сыром формате. И проиграть их вне FlashPlayer'a не получиться. Поэтому их необходимо декодировать, предварительно собрав необходимое количество в бинарный массив ByteArray.

//
// Объявляем бинарный массив для хранения полученных с микрофона аудио-данных
var _samples_arr:ByteArray = new ByteArray();;
//
// Получаем экзмпляр микрофона
var _microphone:Microphone = Microphone.getMicrophone(-1);
//
// Вешаем обработчик события
_microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, onMicrophoneSampleData, false, 0, true);
//
// Обработчик обновления данных в микрофоне
function onMicrophoneSampleData (e:SampleDataEvent):void
{
  //
  // Добавляем полученные данные в биннарный массив
  _samples_arr.writeBytes(e.data);
}

Для начала выполним преобразование в .wav-формат.

Читать дальше: Сохранение звука с микрофона на ActionScript 3.0

четверг, 15 сентября 2011 г.

Уроки по Alternativa3D для новичков

На вики опубликованы новые уроки:

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

Также размещены 2 урока по подключению библиотеки Alternativa3D (7 и 8 версии) к наиболее известным средам разработки:

Все уроки представлены как на русском, так и на английском языке.

Читать дальше: Уроки по Alternativa3D для новичков:

воскресенье, 12 июня 2011 г.

Создание очередной казуалки на Flash-платформе с физикой

Привет, дорогой друг.

Начну с того, что геймдевом я занимаюсь относительно недавно.
Поэтому на качество кода и информации не полагайтесь %)

Скриншот flash игры на Box2dВ этой статье я расскажу о том, как использовать физический движок Box2D для своих игр, на примере прототипа.

Если повезет и вам понравится статья, то будет и вторая часть, и третья часть. В конечном итоге мы получим такую игру. (да-да, игра жутко не доделана, тоже самое, что и в статье, только с графикой и сенсорами)
Остальное под катом.

Читать дальше: Создание очередной казуалки на Flash-платформе с физикой

пятница, 6 мая 2011 г.

Мобильная разработка на Adobe Flex 4.5 и Flash Builder 4.5 - часть 3

Завершаем перевод статьи 'Mobile development using Adobe Flex 4.5 SDK and Flash Builder 4.5'. См. первую часть с обзором мобильной Flex-разработки и стандартной архитектуры мобильного приложения, оптимизация производительности и вторую часть об адаптации приложений для разной плотности пикселей (pixel density), постановке процесса мобильной разработки и управлении мобильными проектами.

Запуск и отладка на десктопе и на устройстве

Когда приходит время тестирования или отладки приложения, у вас есть два варианта. Для быстрого тестирования и отладки можно запускать и отлаживать приложения на рабочем столе с помощью AIR Debug Launcher (ADL). Для большей верности можно также запускать и отлаживать приложения непосредственно на физическом устройстве. В любом случае, вы можете использовать полный набор возможностей отладки Flash Builder, в том числе установку точек останова и изучение состояния приложения с использованием панелей переменных (Variables) и выражений (Expressions).

При запуске или отладке на устройстве вам нужно помнить о следующих ключевых моментах:

  • Если ваше приложение получает доступ к данным, необходимо развернуть ваши сервисы данных на сервере, доступ к которому можно получить с устройства через WiFi или сотовую сеть; а если вы тестируете приложение с локального хоста на рабочем столе, он не будет работать на устройстве, так как "локальным хостом" для устройства является само устройство.
  • Финальный релиз Flash Builder 4.5 поддерживает отладку непосредственно через USB-кабель на Android-устройствах (в отличие от предыдущей версии, которая поддерживает отладку только через WiFi).
  • Для запуска, отладки и развертывания мобильных ActionScript-проектов на физическом устройстве с iOS, вам необходимо получить профиль (provisioning profile) и сертификат от Apple. Кроме того, вы должны будете вручную развертывать приложения на устройстве с помощью iTunes, и запустить его на самом устройстве.
  • Профилирование в настоящее время не поддерживается на устройствах, только на рабочем столе.

Упаковка приложений для развертывания

Читать дальше: Мобильная разработка на Adobe Flex 4.5 и Flash Builder 4.5 - часть 3

четверг, 5 мая 2011 г.

Мобильная разработка на Adobe Flex 4.5 SDK и Flash Builder 4.5 - часть 2

Продолжаем публикацию перевода статьи 'Mobile development using Adobe Flex 4.5 SDK and Flash Builder 4.5'. Для начала, см. первую часть перевода, ее темы: обзор мобильной разработки во Flex, стандартная архитектура мобильного приложения, оптимизация производительности.

Темы второй части:

  • Адаптация мобильных приложений для разной плотности пикселей (pixel density)
  • Постановка процесса мобильной разработки во Flash Builder 4.5
  • Автоматическое масштабирование скинов
  • Учитывающие DPI мобильные скины
  • Растры с множественным DPI
  • Работа на AIR
  • Управление мобильными проектами
  • Проектирование Видов

Читать дальше: Мобильная разработка на Adobe Flex 4.5 SDK и Flash Builder 4.5 - часть 2

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

Разработка под мобильные устройства с Adobe Flex 4.5 SDK и Flash Builder 4.5

Представляем вашему вниманию первую часть перевода статьи 'Mobile development using Adobe Flex 4.5 SDK and Flash Builder 4.5' от Narciso Jaramillo из Adobe.

Примечание:  более ранняя версия статьи была обновлена, теперь в нее включены новые возможности разработки под мобильные устройства: поддержка экранов с различной плотностью пикселей (multi-density), компонент ViewMenu и отладка по USB. Статья довольно большая - читайте ее полностью, пройдя по этой ссылке: Читать дальше: Разработка под мобильные устройства с Adobe Flex 4.5 SDK и Flash Builder 4.5

четверг, 28 апреля 2011 г.

Achievements engine

А вот ещё класс от меня. Точнее даже не класс, а система классов плюс визуальный компонент… короче для краткости будем называть движком ачивок :)
И нужен, как вы уже наверно догадались, для менеджмента ачивок, хранения их значений между сессиями игры, отображение взятых ачивок и т.д.

Для всего этого безобразия нам потребуется куча классов которые я навыкладывал в предыдущих сериях, а именно Cookie.as, ageMath.as, ageVector.as, sounds.as, alphaFader.as. Все они уже есть в исходниках примера, так что отдельно качать ничего не надо.

Да я знаю что практика таскания кучи библиотек многим не по душе, однако я хочу отметить – я даю готовые решения, а не делаю уроки :) так что этот беспредел будет и дальше продолжаться. Я вообще подумываю собрать все наработки в какое-то подобие фреймворка, точнее даже темплейта, который можно будет загрузить и уже на основе него ваять новую игрушку :)

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

Сразу смотрим как это работает [...]

Читать дальше: Achievements engine

воскресенье, 17 апреля 2011 г.

Тотальная растеризация

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

Читать дальше: Тотальная растеризация

пятница, 8 апреля 2011 г.

Системы частиц для спецэффектов в играх. Мантра вторая

Системы частиц для спецэффектов в играх. Мантра вторая.:

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

Системы частиц для спецэффектов в играх. Мантра первая

Системы частиц для спецэффектов в играх. Мантра первая.:

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

Биндинг в ActionScript проектах. Часть 3

Биндинг в ActionScript проектах. Часть 3:

В предыдущих статьях мы рассмотрели возможности биндинга в плане привязки метатега [Bindable] к различным элементам нашего кода и кастомизации срабатывания биндинга с помощью событий. На этом возможности биндинга не ограничиваются. Подписка на события биндинга в методах BindingUtlis.bindProperty и BindingUtlis.bindSetter также дает большое количество возможностей для его реализации.

Для того чтобы слушать изменения свойства или метода, помеченного как [Bindable], необходимо использовать один из методов BindingUtlis.bindProperty или BindingUtlis.bindSetter.

public static function bindProperty (site:Object, prop:String, host:Object, chain:Object, commitOnly:Boolean = false, useWeakReference:Boolean = false):ChangeWatcher
public static function bindSetter   (setter:Function,          host:Object, chain:Object, commitOnly:Boolean = false, useWeakReference:Boolean = false):ChangeWatcher

Единственное принципиальное отличие этих двух методов заключается в том что в первом случае в результате срабатывания биндинга меняется значение указанного свойства prop в объекте site, во втором вызывается метод setter для обработки результата. В остальном эти два метода принимают одинаковые параметры и дальнейшее повествование будет иметь одинаковый смысл для обоих случаев.

Параметр host

Параметр host это объект в котором находится параметр или цепочка параметров за которыми необходимо следить.

Параметр chain

Итак, и метод bindProperty и bindSetter имеют обязательный параметр сhain типа Object, который может принимать следующие значения:

chain в виде строки

Определяет имя привязываемого свойства:

1
BindingUtils.bindSetter(onPropChange, host, "prop");

До сих пор мы в качестве chain всегда передавали именно строку и об использовании данного параметра в таком качестве можно прочесть в предыдущих статьях;

chain в виде массива

Непустой массив, содержащий последовательность свойств за которыми необходимо следить:

1
BindingUtils.bindProperty(this, "prop", host, ["a", "b", "c"]);

Массив в качестве цепочки крайне удобен и используется достаточно часто. Цепочка свойств должна быть указана в виде ["a","b","c"] что будет соответствовать привязке свойства host.a.b.c. Может возникнуть вполне резонный вопрос: “Почему в качестве host не указать сразу host.a.b, а свойство за которым следить не передать в качестве строки "c"?

1
BindingUtils.bindProperty(this, "prop", host.a.b, "c");

Цепочкой целесообразно пользоваться когда в ней встречаются изменяющиеся свойства тоже помеченные метатегом [Bindable]. Утилиты биндинга автоматически будут распознавать изменение любого из таких свойств в цепочке и нам не понадобится городить биндинг в биндинге, следить чтобы экземпляры ChangeWatcher были отписаны и т.п.

Представим что у нас есть класс Model в котором есть свойство item типа Item [...]

Пишем match-3

Пишем match-3:

Всем привет. Очень давно не писал. Дело в том что игра практически готова, и сейчас художник, с которым я работаю, дорисовывает последние моменты. Обо всем этом расскажу когда все будет закончено.
А пока попробую свои силы в переводе урока из книги 'ActionScript 3.0 Game Programming University'. О ней говорилось в прошлом посте. Мне понравился урок по созданию игры на механике match-three. Сам урок я понял с первого раза, а для чего же я сделал перевод? Во-первых, надеюсь это поможет кому-то, кто не силен в инглише. Во-вторых, перевод позволил мне разобрать весь код по косточкам, очень тщательно.

Перед тем как я начну, выдам пару соглашений. Перевод может показаться немного деревянный, но уж примите, такой какой есть. Некоторые слова, выражения могут иметь более подходящие аналоги в русском языке. Если это будет критично, исправлю. В программе используется дополнительный класс PointBurst. Я не буду его сейчас описывать, а скорее всего сделаю это в следующем посте, т.к. это довольно интересный класс. Просто пока будем знать, что этот класс выдает эффект всплывающих очков в определенном месте.
И последнее, я не придумывал ничего нового, а просто сделал перевод, т.е. все благодарности автору книги Gary Rosenzweig.

Match3

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

пятница, 1 апреля 2011 г.

Создание документации средствами FlashDevelop

Создание документации средствами FlashDevelop:

Я все время думал, что создание документации к коду – довольно сложное занятие, но только сегодня узнал, как я ошибался. А все благодаря возможностям FlashDevelop (здесь я рассматриваю версию 3.3.4).
Всем известно, что в комплекте с FlexSDK (который необходим для разработки Flash-приложений без использования Flash IDE) поставляется инструмент ASDoc – программа, работающая из командной строки и позволяющая из особым образом отформатированных комментариев к коду генерировать документацию. Но работать с программами из командной строки неудобно, и тут на помощь приходит FlashDevelop.

Чтобы создать документацию в html-формате нужно сначала написать комментарии к коду. Рассмотрим основные правила и приемы для написания таких комментариев.
Для того, чтобы создать заготовку для документации к какому-либо методу, свойству или описания всего класса, нужно всего лишь перед комментируемым участком кода набрать: /**, и тогда появиться следующая подсказка:

Выбрав пункт Empty, мы получим пустую заготовку:

Во второй строчке этого комментария можно ввести описание следующего за ним public-свойства, getter’а / setter’а, или всего класса.

Выбрав пункт Method details, мы получим заготовку для подробной документации метода:
На второй строке получившегося комментария можно написать описание метода.
На строке с тегом @param имяПараметра пишется описание данного параметра
Строка с тегом @return описывает возвращаемый методом результат.
Все строки заполнять необязательно, некоторые можно и удалить.
Это были основные теги, со списком остальных Вы можете ознакомиться например здесь (Теги ASDoc. AS3).

Кроме автоматического варианта создания заготовки комментария-документации к методу, Вы можете также сами прописывать тэги. Для этого, находясь в комментарии, Вам достаточно набрать @, и тогда появиться список всех тэгов[...]

четверг, 31 марта 2011 г.

Как добавить практически любой шрифт в ваш Flash-проект - бесплатная утилита от MotoCMS

Как добавить практически любой шрифт в ваш Flash-проект - бесплатная утилита от MotoCMS:

Пишет Николай Внимательный:

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

Font embedding

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

Продолжение - Как добавить практически любой шрифт в ваш Flash-проект [...]

Быстрое внедрение шрифтов [Embed]

Быстрое внедрение шрифтов [Embed]:

Уже ни раз писалось о встраивании шрифтов, поэтому я не буду описывать весь процесс а покажу лишь простой и удобный прием на примере кода.

package assets {
 import flash.display.Sprite;
 import flash.system.Security;
 import flash.text.Font;
 import flash.utils.describeType;
 
 public class FontsAsset extends Sprite {
  [Embed(source="../../../res/fonts/MyriadPro-Semibold.otf", mimeType="application/x-font-truetype", fontName="MyriadSemibold", unicodeRange="U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E,U+02C6,U+02DC,U+2013-U+2014,U+2018-U+201A,U+201C-U+201E,U+2020-U+2022,U+2026,U+2030,U+2039-U+203A,U+20AC,U+2122,U+0401,U+0410-U+044F", embedAsCFF="false")]
  // Uppercase [A..Z] ; Lowercase [a..z] ; Numerals [0..9] ; Punctuation [!@#%...] ; Basic Latin ; chars="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
  public static var MyriadSemibold : Class;
 
  [Embed(source="../../../res/fonts/MyriadPro-Regular.otf", mimeType="application/x-font-truetype", fontName="MyriadRegular", unicodeRange="U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E,U+02C6,U+02DC,U+2013-U+2014,U+2018-U+201A,U+201C-U+201E,U+2020-U+2022,U+2026,U+2030,U+2039-U+203A,U+20AC,U+2122,U+0401,U+0410-U+044F", embedAsCFF="false")]
  // Uppercase [A..Z] ; Lowercase [a..z] ; Numerals [0..9] ; Punctuation [!@#%...] ; Basic Latin ; chars="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
  public static var MyriadRegular : Class;
 
  public function FontsAsset() {
   Security.allowDomain("*");
   var xml : XML = describeType(this);
   for (var i : uint = 0; i < XMLList(xml["variable"]).length(); i++) {
    Font.registerFont(this[XMLList(xml["variable"])[i].@name]);
   }
  }
 }
}

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

new FontsAsset();

Конечно не стоит забывать о использовании textField.embedFonts.

[...]

воскресенье, 27 марта 2011 г.

TowerDefence #8. Первая башня

TowerDefence #8. Первая башня:

Сегодня мы наконец-то добавим в нашу игру долгожданные башенки и научим их стрелять и убивать врагов. Но для этого прийдется много поработать [...]