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

понедельник, 11 февраля 2013 г.

Расширения Adobe AIR и инструмент для их компиляции (ANEBuilder)

ANE-расширения для Adobe AIR развиваются быстрее самого Adobe AIR, и это дает новые причины оптимистично оценивать будущее лучшей технологии создания кросс-платформенных приложений (несмотря на двусмысленные инсайдерские сигналы о судьбе AIR в видении Adobe). Эта технология неуязвима уже по причине своей важности для сообщества тысяч разработчиков. Набранные Adobe AIR вес и скорость делают его устойчивым в движении, подобно тому, как устойчив и не может быть резко остановлен тяжелый, набравший скорость локомотив. Особенно, если его не останавливать.  На этом лирическая часть поста закончена, переходим к содержательной.  Растут репозитории расширений Adobe AIR под разные платформы. Ниже -- список главных из них: 

Коллекции AIR Native Extensions

ANE Builder: инструмент для создания AIR Native Extensions

Danel Kirch создал ANEBuilder, и он сразу всем понравился. ANEBuilder -- это приложение Adobe AIR, позволяющее компилировать ANE-файлы, не прибегая к командной строке (пока по умолчанию работает на Mac-ах, но можно настроить для работы на Windows)Вот видео про то, как это работает:

Ссылки по ANEBuilder:


[...]
Читать дальше: Расширения Adobe AIR и инструмент для их компиляции

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

Компонент для работы с растровыми шрифтами

Продолжая работу над портом движка Flixel на Haxe, столкнулся с необходимостью оптимизации работы с текстом. Проблема заключается в следующем: стандартный класс движка FlxText сильно завязан на использование метода draw(), и при обновлении текста создается новый экземпляр класса BitmapData, еще одним недостатком является то, что для каждого такого текстового объекта создается свой экземпляр класса TileSheet (если в качестве целевой платформы установлен c++, neko или android). В общем видно, что такая реализация класса для отображения текста довольно неудачна и нужно искать другие решения. И тут на сцену выходят растровые шрифты -- каждый символ такого шрифта представляет собой по-сути простое изображение и работать с ними можно точно также, как и с обыкновенными изображениями. В наборе классов Flixel Power Tools как раз есть такой класс FlxBitmapFont и я его уже давно портировал, но в нем также присутствует довольно раздражающее меня ограничение -- он поддерживает только моноширинные шрифты (все символы таких шрифтов должны иметь одинаковую ширину), а мне же хотелось чего-нибудь более универсального. И недавно мне на глаза попался движок Pixelizer (упоминал его в одном из предыдущих сообщений), в котором очень понравилась реализация такого компонента: в нем уже был такой функционал, как изменение цвета шрифта, обводка и тени, поддержка многострочного текста и др. Встала задача по переводу этого добра на другие рельсы:
  1. Реализация в виде отдельного компонента, не завязанного ни на какой из движков -- такой класс нужен был для того, чтобы наконец-то закончить портирование прелоадера Flixel.
  2. Реализация в виде плагина для Flixel, которую можно использовать непосредственно в играх.
Самая первая версия порта была готова через 1-2 дня, но сразу же вылезли проблемы с производительностью: для отрисовки текста использовался метод draw(), позволяющий задавать тексту цветовую трансформацию и прочие параметры. Нужно было искать другой способ отрисовки. Подумав немного и посмотрев на реализацию спрайтов в Flixel, пришел к следующему решению: на входе имеем набор растровых изображений, представляющих собой исходные изображения символов растрового шрифта, а для того, чтобы отображать масштабированный и "окрашенный" текст создается дополнительный массив трансформированных изображений символов, таким образом, мы можем использовать уже гораздо быстрый метод copyPixels() (после такого преобразования нагрузка на процессор при отрисовке текста снизилась в 2-4 раза).
Завершив с оптимизацией, я приступил к реализации дополнительных "фишек":
  • настройка размера шрифта
  • настройка расстояний как между символами, так и между строками текста
  • настройка переноса слов
На это ушло еще несколько дней, скачать и посмотреть что получилось можно со странички репозитория - https://github.com/Beeblerox/BitmapFont [...]
Читать дальше: Компонент для работы с растровыми шрифтами

четверг, 5 апреля 2012 г.

Динамическая генерация текстурных атласов

Давно задумываюсь: "А не попытаться ли перевести Flixel на Stage3D?" Сам автор движка обещал, что когда новая версия flash-плеера с аппаратной поддержкой 3D получит достаточно широкое распространение, то он добавит эту фичу. Но новостей от него пока не слышно; тема на форуме фликселя, посвященная планам по разработке новой версии, тоже довольно давно не обновлялась. Поэтому и мысли такие. Кроме того, в сети появилось несколько очень хороших уроков по stage3D, в которых рассматривается использование нового API для разработки двумерных игр. Из них можно вынести очень полезные сведения, связанные с оптимизацией графики:
  • необходимо минимизировать количество вызовов метода drawTriangles(), т.к. он довольно ресурсоемок;
  • также следует использовать как можно меньше текстур, т.к. размеры текстур могут иметь строго определенные значения (64х64, 128х128, 256х256, 512х512, 1024х1024 или 2048х2048). И если в Вашей игре используется множество маленьких изображений, для каждого из которых Вы будете создавать новую текстуру, то видеопамять будет расходоваться нерационально (в каждой такой текстуре будет много "пустого места") и довольно быстро закончится.
 Для решения этих проблем рекомендуется использовать "пакетный рендеринг" (не знаю, правильный ли я использую термин, на английском он пишется batch-rendering), при котором мы за один вызов метода drawTriangles() пытаемся отрисовать все полигоны, использующие одну и ту же текстуру. Для этого нам и понадобится генерация текстурных атласов, вынесенная в заголовок статьи и позволяющая значительно уменьшить количество текстур (о пакетном рендеринге я скорее всего напишу в следующей статье). Суть его в следующем: на входе мы имеем множество мелких изображений, а на выходе -- одно (это в идеале) большое. На русском языке уже есть, по крайней мере, одна статья от flash-сообщества, посвященная этому вопросу -- класс для генерации текстурных атласов, в ней дается исходник класса, использующий рекурсивный метод построения атласа. Данный класс мне показался не слишком понятным, а так хотелось самому разобраться в алгоритме, благо что в статье приведена ссылка на англоязычную статью по данному вопросу, из которой и становится ясен общий принцип.
Читать дальше: Динамическая генерация текстурных атласов

четверг, 29 марта 2012 г.

Alternativa3D 8 вышла в Open Source!

Друзья, 29 марта 2012 года произошло важное для компании AlternativaPlatform и, надеемся, для многих из вас событие! После шести лет развития в закрытом состоянии графический Flash 3D движок Alternativa3D 8 выходит в Open Source. Исходный код опубликован на портале GitHub. С открытием исходного кода в истории Alternativa3D начинается новый период. Мы рассчитываем, что силами сообщества технология будет развиваться быстрее, а также станет понятнее и доступнее благодаря росту числа учебных и аналитических материалов от разных авторов на разных языках. Публиковать их, кстати, можно в нашей Базе знаний. Со своей стороны мы не прекращаем развитие и поддержку движка, так что идеи и предложения приветствуются — вы всегда можете оставить их на нашем форуме.
Согласно обновленной лицензии, любая организация или частное лицо может свободно использовать технологию в своих целях. При этом размещать в созданных на движке проектах логотипы и иные упоминания об AlternativaPlatform как разработчике Alternativa3D более не требуется. Тем не менее, мы будем признательны за такие упоминания.
Перейти к исходникам
Обсудить на форуме
Читать дальше: Alternativa3D 8 вышла в Open Source!

воскресенье, 15 января 2012 г.

Nape и Starling вместе? Это возможно!

Привет, друзья!

Некоторые из вас уже наверняка пробовали использовать быстрейший flash 2D физический движок Nape вместе с GPU 2D фреймворком Starling и заметили, что свойство Body.graphic является flash.display.DisplayObject и не может быть приравнено к экзмепляру starling.display.DisplayObject.

В итоге, некоторые просто использовали более медлительный Box2D, некоторые самостоятельно контролировали отрисовку физических тел в виде DisplayObject’ов движка Starling, вожможно, некоторые даже сделали то же самое, что сделал я, но никому не показали. Мне нравится свойство Body.graphic — оно очень удобное и мне хотелось бы помочь всем as3 разработчикам использовать его в полную силу и для DisplayObject’ов Starling’а.

Представляю вашему вниманию модифицированные swc движка Nape (release и debug) Milestone 7.2 «r3″ для FP 10+, (возможно, не полностью) совместимые со Starling.

Всё, что я там изменил — заменил класс Body.graphic flash.display.DisplayObject на Dynamic (* в as3) и удалил конвертацию в градусы свойства Body.graphic.rotation. В моём случае, этого было достаточно.
Теперь я могу использовать Nape как обычно, с обычными DisplayObject’ами, что очень здорово!
Да, там наверняка есть ещё какие-нибудь несовместимые вещи со Starling, но в моём случае Nape работает без ошибок и проблем не возникает.

Качайте и используйте эти swc со Starling в своё удовольствие!
debug swc
release swc

Мне понравилось приключения с компиляцией caxe и flib под Windows в MinGW, это было здорово!
Чтобы скомпилировать swc под Windows, надо: [...]

Читать дальше: Nape и Starling вместе? Это возможно!

четверг, 15 декабря 2011 г.

Делаем правильные swc библиотеки

Flex пока еще не отпускает меня, и приходится с ним возиться. Для начала, надо отметить, что Flex фреймворк в целом хорошая штука. Местами даже изящная штука (это я следую американскому стилю, которому меня научил Яков Файн: сперва похвалить, потом поругать).

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

Давеча я убрал maven/flexmojos из своих проектов, и заменил их ручной конфигурацией проекта в IDEA и ant скриптами. Надо сказать, что так проще и лучше. Во всяком случае, для меня этот вариант явно комфортнее.

Теперь, в отличие от варианта c flexmojos, проект действительно легко подымается с нуля на машине нового разработчика, сразу собирается и запускается. Все swc зависимости лежат прямо в папке libs в самом проекте. А все настройки IDEA комитятся в репозиторий вместе с кодом проекта (ну почти все, кроме workspace.xml).

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

У нас есть ряд модулей (swc библиотек), которые написаны на чистом AS, не имеют никаких зависимостей от Flex SDK, и используются во многих проектах. Несмотря на то, что зависимостей нет, compc все равно старательно сует внутрь swc файла кучу классов из sdk. В результате модуль получается привязанный к конкретной версии sdk. И попытка использовать его в проекте с другим sdk может давать непредсказуемые эффекты, вплоть до того, что проект просто не соберется.

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

Читать дальше: Делаем правильные swc библиотеки

среда, 23 ноября 2011 г.

AlternativaGUI - простой способ создать комплексный интерфейс

Библиотека для создания пользовательских интерфейсов AlternativaGUI вышла в свет. Загрузить ее можно с официального сайта компании AlternativaPlatform в разделе GUI. Библиотека распространяется бесплатно и может беспрепятственно использоваться в том числе в коммерческих проектах. Согласно лицензионному соглашению нужно лишь указать в описании проекта ссылку на сайт alternativaplatform.com.

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

Особенности AlternativaGUI

  • Высокое быстродействие
    Быстродействие достигается слаженной работой всех компонентов интерфейса в одной системе. В базовых классах реализован только самый необходимый функционал, отсюда низкий расход ресурсов.
  • Гибкость
    Библиотека позволяет создавать различные графические элементы и может контролировать их свойства. Простота и понятность API библиотеки позволяет расширять все классы очень легко и дополнять именно тем функционалом, который нужен вам.
  • Лодируемость элементов
    AlternativaGUI позволяет разрабатывать интерфейс под различные разрешения экрана. Для этого применяется лодирование элементов (от LOD — Level Of Details) и их корректное масштабирование (для компонентов с растровой графикой). Каждый лодируемый элемент имеет несколько графических состояний (лодов). При переключении лода может меняться размер шрифта, размер иконки, могут быть скрыты неважные элементы или, наоборот, открывается дополнительная информация. Эту логику описывает разработчик. Переключение лода происходит автоматически. Особенно полезным лодирование может быть при разработке интерфейсов для мобильных устройств с различными разрешениями экранов.
  • Быстрота создания уникальных компонент
    Благодаря использованию базовых классов, создание и управление компонентой проходит на более глубоком уровне. Базовые классы не содержат никакой графики и определяют только логику работы компонентов.
  • Интуитивно понятный API
    Работа с компонентами AlternativaGUI похожа на работу со стандартными классами типа Sprite.

Для быстрого прототипирования интерфейсов была разработана заскинованная библиотека AlternativaGUI Default Theme, которая содержит основные компоненты. Данная библиотека предоставляется с исходным кодом.

Загрузить AlternativaGUI
Читать документацию
Открыть демонстрацию в новом окне

Читать дальше: AlternativaGUI - простой способ создать комплексный интерфейс

вторник, 28 июня 2011 г.

Компонент Table на ActionScript 3

Потребовалось отображать табличные данные на чистом as3 без использования компонентов Flex (типа DataGrid) или Flash. Как обычно, первым на очереди был гугл. Но, к своему удивлению, ничего бесплатно-приемлемого найти не удалось. Изваял свой. Старался сделать компонент максимально простым в использовании. Можно загрузить swc-файл и подключать к любому проекту. Версия Flash-плеера не меньше 10-й.

Читать дальше: Компонент Table на ActionScript 3

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

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

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

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

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

Звуки и музыка

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

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

Музыкальный класс может воспроизводить зациклено музыкальные треки а также обеспечивать плавную смену музыки путём затухания.

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


Смотрим пример (жмём на жёлтые кружочки, чтобы было весело):

Использовать класс sounds весьма просто. Для начала надо в функции init написать те, звуки которые будут загружены:

//Здесь втыкаем свои звуки
snd['mysnd'] = new mysnd();

потом надо инициализировать класс в основной программе:

sounds.init(500,400);

Вот вообщем-то и всё! Теперь мы можем вызывать воспроизведение звука где нам это необходимо:

sounds.PlaySnd('mysnd',1,b1);

первый параметр это имя звука, которое мы задали в функции init. Второй – это сила звука, для взрывов например можно ставить 2 или 3. Последний параметр это эмиттер звука. Его координаты будут использованы для расчёта затухания звука, а также его панорамирования. Если задать только имя звука – он будет воспроизведён без учёта положения. Все звуки воспроизводятся относительно координат sounds.cenX и sounds.cenY. По умолчанию это центр экрана (все расчёты ведутся в глобальных координатах Stage). Также можно привязать слушателя к конкретному объекту, для этого необходимо будет менять cenX и cenY в основной программе (не забывая переводить координаты в глобальную систему координат).

Громкость звуков можно менять с помощью переменной sounds.vol. Отключить все звуки можно задав переменной sounds.sndEnable=false.

Класс sounds: [...]

Читать дальше: Звуки и музыка:

понедельник, 21 марта 2011 г.

OpenZoom SDK

OpenZoom SDK:

OpenZoom SDK создана для отображения высококачественных изображений в Интернете, с помощью пирамид изображений. Она предоставляет достаточный инструментарий для отображения и управления отображением изображений и карт. У библиотеки хорошая справка, примеры и комьюнити, поэтому ограничусь лишь поверхностным описанием, просто, чтоб вы знали, что это уже реализовано и 'не надо париться'. SDK имеет две версии – для [...]

четверг, 17 февраля 2011 г.

Исходники демо-игры. Alternativa3d и физика Jiglib

Исходники демо-игры. Alternativa3d и физика Jiglib: "

Alternativa3d

JigLib

Alternativa3d и физика Jiglib

Всем добрый день! Очень хорошо заметно, что в последнее время все больше и больше флешеров начинают разрабатывать 3д игры, сайты, демонстрации и т.д. и т.п. И приходит все больше и больше писем, с просьбой о помощи в настройке и использовании JigLib с Alternativa3d. Я решил выложить довольно большой кусок моей работы, в которой задействован JigLib и A3D. Это один из самых первых тестов разрабатываемой мной ранее 3д-игры(видео с ней публиковал в свой блог с названием «;)») Так вот, решил выложить сорсы, чтобы в рунете был хоть один толковый пример использования данных движков + большой профит разработчикам, использовать как обучающий материал. Надеюсь вам понравится, и вы найдете много чего интересного для себя [...]

пятница, 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.

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

пятница, 17 декабря 2010 г.

Обновление Alternativa3D 7.6.0

Обновление Alternativa3D 7.6.0:

На сайте доступно обновление Alternativa3D до версии 7.6.0 а также обновление плагина для 3ds Max 2010.

Список изменений:

  • View: удалено свойство interactive. Теперь вьюпорт сам является источником событий и интерактивность можно отключить с помощью mouseEnabled.
  • View: переопределён метод getObjectsUnderPoint(), который возвращает массив трёхмерных объектов под точкой.
  • Object3D: добавлено свойство useHandCursor.
  • Object3D: добавлен геттер concatenatedMatrix.
  • Удалён класс Geometry, и соответственно удалены геттеры и сеттеры на geometry во всех классах.
  • Mesh: все механизмы для работы с вершинами и гранями перенесены из Geometry.
  • Vertex, Face: добавлено свойство id. Это не обязательное поле, и оно не требует быть уникальным.
  • BSP: добавлены методы createTree() и destroyTree().
  • Occluder: добавлены методы createForm() и destroyForm().
  • Skin, Joint: API по работе с дочерними джоинтами унифицирован с API Object3DContainer по работе с дочерними объектами.
  • Joint: добавлено свойство bindingMatrix, геттер на concatenatedMatrix и методы localToGlobal() и globalToLocal().
  • Sprite3D: добавлено свойство autoSize.
  • BSPContainer: изменены параметры метода createTree().
  • Добавлен класс EllipsoidCollider для обнаружения столкновений.
  • RayIntersectionData: добавлено свойство uv.
  • Значительно изменено API анимации по работе с ключевыми кадрами и блендингами. Добавлены новые типы анимации и их смешения.
  • ParserCollada: изменены свойства и методы в связи с изменением системы анимации.
  • Parser3DS: добавлен метод getObjectByName().