пятница, 27 января 2012 г.

Игровые циклы или ЭлектроКардиоГама

Игровой цикл — это пульс каждой игры. Ни одна игра не будет работать без этого. Однако, к несчастью каждого нового разработчика игр, в сети нет хороших статей, в которых уделено достаточное внимание этой теме. Но не печальтесь, потому как только что вы получили возможность прочитать единственную в своем роде статью, уделяющую вопросу игровых циклов заслуженное внимание. По долгу службы мне часто приходится иметь дело с большим количеством кода мелких мобильных игр. И я каждый раз удивляюсь сколь много существует реализаций игрового цикла. Вы тоже можете удивиться как можно для такой, казалось бы простой, вещи можно придумать множество имплементаций. А ведь можно! И в статье я постараюсь рассказать о достоинствах и недостатках наиболее популярных вариантов игровых циклов. Также я постараюсь описать наилучший на мой взгляд вариант реализации игрового цикла.
(Thanks to Kao Cardoso Félix this article is also available in Brazilian Portuguese) (Thanks for me, in Russian also, прим. перев.)

Читать дальше: Игровые циклы или ЭлектроКардиоГама

воскресенье, 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 вместе? Это возможно!

вторник, 20 декабря 2011 г.

Создание порта движка для создания двухмерных игр Flixel на Haxe

1. Что такое Haxe?
Haxe – это объектно-ориентированный язык для кроссплаторменной разработки, в настоящее время в качестве целевых платформ для него выступают flash, javascript, php, c++ (в начале 2012 года ожидаются c# и java). Если Вы раньше писали программы на ActionScript 3, то синтаксис Haxe покажется Вам знакомым (еще один немаловажный плюс). При этом для haxe существует множество различных библиотек, существенно облегчающих различные задачи. Одной из таких библиотек является NME (Neko Media Engine), позволяющая пользоваться flash api при разработке графических приложений для Windows, Mac, Linux, Android, iOS, WebOS, HTML5 и, конечно, flash (куда же без него), это означает, что Вы пишете один код (ну, почти что один), и он работает на всех перечисленных платформах. Кроме того, программы под Windows, Mac, Linux, Android, iOS и WebOS используют аппаратное ускорение графики (через OpenGL, OpenGL ES), что на данный момент дает значительное преимущество в производительности перед флэшом (аппаратное ускорение в котором есть на персоналках, но на мобильных платформах его пока только обещают).

Читать дальше: Создание порта движка для создания двухмерных игр Flixel на Haxe

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

Что такое игровой фан, или как сделать игры интересными - доклад для FlashGamm 2011 в Киеве

В Киеве прошёл очередной FlashGamm, оставив после себя не только хорошие воспоминания, но и новые знакомства а также понимание куда двигаться дальше. Продолжая развивать тему геймдизайна, я поставил для себя планку разобраться с понятием “игровой фан” - тема фундаментальная и на столько сложная, на сколько и полезная.

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

Читать дальше: Что такое игровой фан, или как сделать игры интересными - доклад для FlashGamm 2011 в Киеве

четверг, 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 библиотеки

среда, 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

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

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

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

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

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

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

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

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

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