вторник, 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 - простой способ создать комплексный интерфейс

четверг, 3 ноября 2011 г.

Интервью с создателем FlashJS

Денис РадинДрузья, представляем вашему вниманию интервью с Денисом Радиным - автором движка FlashJS, переносящего методы разработки из Flash в HTML5 и JavaScript. Мы уже писали об этом проекте в статье "FlashJS – игровой движок на Javascript и HTML5 для флэшеров, open source".  

В этом интервью мы узнаем, как Денис пришел к идее переноса Flash в Javascript, есть ли альтенативы его решению, чем FlashJS лучше и что из этого может получиться. 

Интервью берет Ростислав Сирык, на вопросы отвечает Денис Радин.

 

- Денис, твой проект впечатляет - уже первые отзывы свидетельствуют о том, что люди оценили идею, да и реализация неплоха. Как ты пришел к тому, чтобы сделать такой движок?
- С 2001 года наблюдаю за развитием игровых и графических движков. Разрабатывал еще на GLScene, DelphiX вел разработку векторного движка для CAD систем под .Net и потом познакомился с Flash...

Он оказался логичней всего увиденного ранее, а структура прекрасна и как нельзя лучше подходит для своего круга задач.

HTML5 сейчас извергается сотнями хитрых поделок от геймдева: какие-то получше, какие-то - использовать просто невозможно, но абсолютно всем далеко до того изящества и универсальности, которые флэш получил за свою многолетнюю историю.
К тому же, моя основная работа - разработка большой базы кода на AS3 и сейчас нам необходим iOS-фоллбек. Большой проект - много работы по переносу.  FlashJS все упрощает, экономит время и за это нравится руководству компании, где я работаю.

- А ты смотрел на то, что делает в этом направлении Adobe?
- Да, я тестировал инструмент Adobe Edge, и мне не показались удачными подход и реализация. Во-первых, Эдж не поддерживает знакомую флэшовую парадигму разработки - например, нет все тех же фреймов. Разработчики почему-то решили отказаться от правильных наработок и начали изобретать что-то свое [...]

Читать дальше: Интервью с создателем FlashJS

четверг, 20 октября 2011 г.

FlashJS – игровой движок на Javascript и HTML5 для флешеров, open source

Денис Радин (он же - Pixels Commander и идеолог iTSea), придумал, сделал и развивает библиотеку FlashJS для разработки игр на HTML5 в стиле Flash.

Это означает применение обьектной модели Flash Player коде, размещаемом в HTML-тэге <actionscript>. Уже доступны такие объекты и методы:

  • DisplayObject
  • addChild, removeChild, removeChildAt, getChild, getChildByName, numChildren
  • KeyboardEvent
  • Loader
  • onEnterFrame
  • alpha, rotation, x, y
  • и другие объекты из Flash, разработка продолжается.

Сам проект open source и выложен на FlashJS @ GitHub - Денис приглашает всех желающих к сотрудничеству. Есть онлайн-демо:

Flash JS Racing MiniGame Demo

Читать дальше: FlashJS – игровой движок на Javascript и HTML5 для флешеров, open source

вторник, 18 октября 2011 г.

Реклама AdMob и мобильные Air приложения

Короткий пост о том, как разместить баннер популярной сети AdMob в мобильном Air приложении. Рассмотрим один-два нюанса, решим проблему нежелательного масштабирования.

Итак начнем. Оставим без деталей несложный процесс регистрации на сайте AdMob, и создание нового сайта/приложения:

AdMob создание нового сайта или приложения

Для размещения баннера в приложении для iPhone и iPod Touch я выбираю iPhone App — мне это кажется логичным. Однако многие авторы подобных статей рекомендуют выбрать Smartphone Web. Такой вариант удобен тем, что сразу приводит нас к необходимому javascript коду вместо такой вот новости [...]

Читать дальше: Реклама AdMob и мобильные Air приложения

Adobe Flash Player и передача потоковых данных без участия сервера, часть 1-я: организация пирингового вещания

Как известно недавнее обновление продуктов Adobe Flash Player до 10.1 и Adobe AIR до 1.5 версий осуществило целый фурор, презентовав новый протокол связи Real-Time Media Flow Protocol (RTMFP). Заранее попрошу не путать вышеупомянутый с Real-Time Messaging Protocol (RTMP) для использования которого был необходим Adobe Flash Media Server (FMS) на стороне обслуживающего сервера.
    Разработчики обещают, что протокол будет обладать низкой задержкой во времени при пересылке пакетов, но самое главное, протокол ориентирован на организацию пиринговой сети

Читать дальше: Adobe Flash Player и передача потоковых данных без участия сервера, часть 1-я: организация пирингового вещания

суббота, 15 октября 2011 г.

Пишем шейдер на AGAL

Ни для кого уже не секрет, что Flash Player 11 имеет поддержку GPU ускорения графики. Новая версия вводит Molehill API позволяя работать с видеокартой на достаточно низком уровне, что с одной стороны даёт полную волю фантазии, с другой требует более глубокого понимания принципов работы современной 3D графики.

В данной статье речь пойдёт о языке написания шейдеров – AGAL (Adobe Graphics Assembly Language). Предполагается, что читатель знаком с базовыми основами современной realtime 3D графики, а в идеале – имеет опыт работы с OpenGL или Direct3D. Для остальных же проведу небольшой экскурс:

  • в каждом кадре всё рендерится заново, подходы с частичной перерисовкой экрана крайне нежелательны
  • 2D – частный случай 3D
  • видеокарта способна растеризовать треугольники и ничего кроме
  • треугольники строятся на вершинах
  • каждая вершина содержит в себе атрибуты (координата, нормаль, вес и др.)
  • порядок задания вершин в треугольнике определяется индексами
  • данные вершин и индексов хранятся в вершинном и индексном буферах соответственно
  • шейдер – программа выполняемая видеокартой
  • каждая вершина проходит через вершинный шейдер, а каждый пиксель при растеризации через фрагментный (пиксельный)
  • видеокарта не умеет работать с целыми числами, но отлично работает с 4D векторами

Синтаксис
В текущей реализации AGAL используется обрезок Shader Model 2.0, т.е. фитчелист железа ограничен 2005 годом. Но стоит помнить, что это ограничение лишь возможностей шейдерной программы, но никак не производительности железки. Возможно, в будущих версиях Flash Player планка будет поднята до SM 3.0, и мы сможем рендерить сразу в несколько текстур и делать текстурную выборку прямо из вершинного шейдера, но учитывая политику Adobe, случится это не раньше выхода следующего поколения мобильных устройств.

Любая программа на AGAL является по сути низкоуровневым языком ассемблера. Сам по себе язык очень простой, но требует изрядной доли внимательности. Код шейдера представлен набором инструкций вида: [...]

Читать дальше: Пишем шейдер на AGAL

вторник, 4 октября 2011 г.

AlternativaPlatform на конференции Adobe MAX 2011

Конференция Adobe MAX 2011 проходит в Лос-Анджелесе с 1 по 5 октября 2011 года. Мы выступили золотым спонсором мероприятия и представили на нем свои последние разработки в области отображения трехмерной графики с аппаратным ускорением в среде Flash Player. Генеральный директор компании Александр Карпович и арт-директор Иван Зыков выступили с докладом “Amazing new possibilities in Flash with Alternativa3D”, рассказав о возможностях графического движка Alternativa3D 8. Разрабатывать и запускать проекты на базе движка можно уже сегодня.

Наряду с графическим движком и серверной частью мы создаем собственный онлайн-редактор AlternativaEditor. Уже сейчас его можно использовать как бесплатный инструмент для публикации 3D-моделей. После загрузки модели в редактор по адресу editor.alternativaplatform.com пользователь получает ссылку и код для встраивания объекта в блог или сайт. Впоследствии AlternativaEditor также будет доступен партнерам компании как полноценный инструмент для изменения параметров игрового мира и перемещения объектов в реальном времени непосредственно во время игры.

Увидеть возможности AlternativaPlatform можно своими глазами, загрузив интерактивную демонстрацию “Танков Онлайн 2.0″ на картах “Арена” и “Крушение“, а также промо-игру MAX Racer, созданную по просьбе Adobe Systems для демонстрации возможностей Stage3D (Molehill 3D APIs) на Adobe MAX 2010.

Читать дальше: AlternativaPlatform на конференции Adobe MAX 2011

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

Parallel rewards

Аддиктивность

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

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

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

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


 

Параллельные линейные награды

Это система, при которой к одному игровому действию привязано несколько разных типов наград с разной длительностью. Формула: награда + ожидание награды.
 
Поясню на примере. Есть игровое действие - выстрел.
  • Игрок стреляет в стену - ничего интересного не происходит. За выстрел в стену награды нет.
  • Игрок стреляет в противника, и противник умирает. Это награда, ведь тем самым игрок приближается к прохождению уровня, уменьшает количество препятствий. (Режим подкрепления с постоянным соотношением)
  • Теперь пусть за каждого убитого врага главный персонаж получает опыт - это уже добавляет интерес. Ведь одним действием игрок не только уменьшает количество препятствий, но и приближает момент получения классной награды - нового уровня.  (Модифицированный режим подкрепления с постоянным соотношением)
  • А теперь добавим врагам 5% вероятность выпадения чего-то приятного: аптечку, патроны, броню, энергию и т.д. Убивать становится еще интереснее.  (Режим подкрепления с вариативным соотношением)
  • Увеличим вероятность выпадения бонуса за хедшот до 20%. Величина (или частота выпадения) награды теперь также зависит и от мастерства игрока. Здесь мы разделяем игроков на тех, кто готов напрячься, но получить награду и на тех, кто просто хочет пройти игру и посмотреть сюжет или просто не хочет напрягаться.
  • Добавим разнообразия. Десять хедшотов подряд дают игроку возможность использовать управляемую ракету. Становится еще веселее.
  • Напоследок, следуя веянию времени, добавим бронзовое достижение за 1000 убийств, серебряное - за 2000 и золотое - за 3000.

За попадание по противнику игрок получает награду. А уже от того, как игрок стреляет, зависит тип и величина награды. И если до этого стрельба была скучной, то теперь она может стать  веселее. Все, что мы сделали - это "навесили" на нее несколько разных типов наград и разбили их по времени.

Параллельные линейные награды я еще называю наградами за одинаковые действия. Они обычно используются для прокачки какой-то игровой возможности. Также их можно использовать и для того, чтобы поощрять игрока делать определенные действия. Именно такой подход я использовал в Collapse: Ярость для того, чтобы игроки не боялись использовать ближний бой.

Вспомните, как приятно, когда в РПГ (из современных, например, серия The Elder Scrolls) те навыки, которыми вы пользуетесь, параллельно прокачиваются. Вы своими действиями уже получаете какой-то результат. Например, убили врага мечом. Но при этом осознаете, что навык пользования мечом прокачивается. В Borderlands таким образом прокачивались навыки пользования разными типами огнестрельного оружия. Нередко во время очередной перестрелки мысль о том, что оружие прокачивается, греет не устающую от гринда геймерскую душечку.

Читать дальше: Parallel rewards

понедельник, 26 сентября 2011 г.

Что заставляет игроков переигрывать игры по несколько раз

Недавно меня спросили: “Есть ли у меня забавные игрушки с высокой реиграбельностью?” Немного подумав, я понял, что почти ничего не знаю о том, как сделать игру, в которую игроки будут возвращаться снова и снова. Следующие несколько недель я рыскал по интернету в поисках всего по заданной теме. Полученная информация вылилась в доклад для GameDevSat в Днепропетровске, который проходил 24.09.11.

Итак, почему же люди переигрывают одни и те же игры по несколько раз?

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

Читать дальше: Что заставляет игроков переигрывать игры по несколько раз

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

Пьеса «Разработка многопользовательской сетевой игры.» Часть 3: Клиент-серверное взаимодействие



Часть первая: Архитектура
Часть вторая: Протокол

С третьей частью я немного задержался. Но как говорится лучше поздно чем никогда…

Итак, продолжаем разговор.

В третьей части нашей постановки мы реализуем протокол, напишем сервер и клиент которые будут взаимодействрвать по сети. И (ОМГ!) танки будут ездить!
Под катом то, что вы давно хотели, но боялись спросить…

Пьеса «Разработка многопользовательской сетевой игры.» Часть 3: Клиент-серверное взаимодействие

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

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

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

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

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

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

среда, 14 сентября 2011 г.

Как я делал игру

Всем привет, меня зовут Марк, я — Flash-разработчик. Я доволен своей работой, с помощью которой я могу сейчас зарабатывать достаточно для достойного существования в городе на букву М, да чтобы ещё и была возможность потихоньку копить сбережения на будущее. Даже несмотря на то, что в этой стране само слово «будущее» является каким-то очень странным и непонятным термином.

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

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

Как я делал игру

воскресенье, 11 сентября 2011 г.

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

Привет хабра-сообществу.

Относительно недавно достаточно давно писал статью про создание очередной казуалки на Flash-платформе с физикой, обещал вторую статью, встречайте.
В этой статье — научу рисовать мир и расскажу о сенсорах. Остальное под катом.

Что можно сделать из этих двух уроков, можно посмотреть тут (музыку отключить нельзя, но можно убрать звук в системе)[...]

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

Создание своего Java Socket Server. Первый контакт

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

В этой части мы создадим сервер при помощи библиотеки Netty, сделаем библиотеку на AS3 и проверим её. Чтобы понять процесс остановимся на простой реализации — клиент будет отправлять серверу сообщение, а сервер будет отправлять его обратно (это называется echo-сервер).

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

Создаем java-socket сервер.

Создание сервера на Netty – процесс очень простой. Достаточно раз понять архитектуру этой библиотеки. Подробно с работой этой библиотеки можно познакомиться на сайте проекта.

Создаем новый канал.

Первым делом создаем фабрику для создания и управления Каналами и связанными ресурсами. Она будет обрабатывать все I/O запросы и генерировать ChannelEvent, которые мы уже будем обрабатывать [...]

Создание своего Java Socket Server. Первый контакт

суббота, 3 сентября 2011 г.

Создание своего Java Socket Server. Создание заготовки. Код в студию!

Написание сервера работа довольно объемная, поэтому описание функций я планирую делать методом добавления новой функциональности в демо-версию сервера.

Начнем с небольшой заготовки, которая будет содержать:

  • логгер
  • считывание параметров
public class JavaServer extends BaseJavaServerLoggedClass {

	public static JavaServerProperties properties;

	public static void main(String[] args) {
		prepare();
		info("String server...");
	}

	private static void prepare() {
		try {
			loadProperties();
			initLogger();
		} catch (Exception e) {
			System.out.println(e.getMessage());
			System.exit(-1);
		}
	}

	private static void loadProperties() throws Exception {
		properties = new JavaServerProperties();
		properties.loadProperties();
	}

	private static void initLogger() {
		org.apache.log4j.PropertyConfigurator.configure(properties.getProperty("log4j.propertyFileName"));
	}
}

Тут все предельно просто:
1. в методе initLogger() мы инициализируем логгер. Сами методы логера спрятаны в классе BaseJavaServerLoggedClass, чтобы не отвлекать от основного [...]

Читать дальше: Создание своего Java Socket Server. Создание заготовки. Код в студию!

Прототипирование игр с помощью JavaScript и CSS3

Я хотел бы поделиться прототипом игры, созданным всего за несколько часов. Надеюсь, что он вдохновит нескольких из вас! В индустрии однопользовательских браузерных игр, кажется, очень не хватает воображения и умения рассказывать истории, хотя, возможно, я просто не заметил таких игр ;), но мне не хватает таких игр, как Grim Fandango.

Ниже приведен скриншот из демонстрации, состоящей из нескольких узлов DOM, представляющих составные части главного героя, птиц и сцену. Большинство анимаций осуществляется CSS-переходами/анимациями, некоторые из которых являются динамическими и используют библиотеку move.js.

Grim Fandango

Читать дальше: Прототипирование игр с помощью JavaScript и CSS3:

вторник, 30 августа 2011 г.

Создание своего Java Socket Server. Теория. Из ActionScript3 в Java.

Введение

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

Я флеш-программист, и мой опыт работы с явой исчисляется где-то месяцем. Эта статья типа «написание Java Socket сервера глазами флеш-программиста».

Предыстория.

До того, как мы написали свой сервер в нашем проекте Doom Forge Game мы использовали готовое решение для мультиплеерных игр — Smart Fox Server. Сервер сделан хорошо, в нем много возможностей, но нам пришлось столкнуться с некоторыми проблемами в его работе, которые решались тяжелым общением с безинициативной службой поддержки и решение проблемы могло занимать не меньше месяца (если проблема вообще решалась). Так что опыт использования Smart Fox Server у меня был печальный.

Из ActionScript3 в Java

На самом деле, перейти из флеша на яву было очень просто. В java и флеше есть несколько отличий, которые запомнились лично мне (конечно, это не все отличия), но в общем они очень схожи.

Читать дальше: Создание своего Java Socket Server. Теория. Из ActionScript3 в Java.

понедельник, 29 августа 2011 г.

Ant.Karlov. Муравьиный лев

Нужно ли представлять?

Небольшое досье:

Антон КарловИмя: Антон Карлов

Возраст: 27 лет

Чем знаменит: Кумир разработчиков.  Непосвященные в тайны геймдева знают его как автора сочных игрушек с крутой атмосферой.

 

 

 

 

 

Раз уж вам так интересно, то скажу, что я познакомился с Антоном раньше, чем с кем-либо из флешдевелоперов.  Два года назад, если не больше, наткнулся я в сети на его видео, которое стало лидером по переходам с поисковых систем. После него я прошерудил весь блог и добавил его в гуглридер. Тогда в нем было только 4 подписки.

Сейчас, насколько я мог судить, у каждого блогера, который хоть раз в жизни кликал по ярлычку флеша на рабочем столе, блог Антона висит в разделе «сайты для вдохновения». Как вы понимаете, такая популярность не случайна. Подытожив его деятельность за два года хочу сказать, что писал он пожалуй о всех важных аспектах геймдева, так что интервью у него взять было сложно. Кроме крутых уроков по графике,  раскрытия некоторых секретов кодинга и работы вообще я обожаю читкануть его посты с тегом «Разное». Перед тем как брать интервью, я проглядел с самого начала все его посты, что и вам советую сделать. Меня лично очень вдохновляет эволюция его стиля, не резкая, а плавная. Добавление новых мелочей в каждую новую игру это, наверное, его главная фишечка. Как я и говорил,  мне было сложно задавать оригинальные вопросы, поскольку почти все что он делает описано в его статьях. Поэтому я составил вопросы, которые затрагивали либо темы далекого прошлого, либо будущего, чтобы не заставлять его дублировать свои мысли. Если честно, я и не ожидал, что ответы будут такими душевными. Очень рад, что взял интервью у такого открытого человека. Но сопли прочь, вперед читать [...]

Читать дальше: Ant.Karlov. Муравьиный лев.

пятница, 26 августа 2011 г.

Бот для Flash-игры / Внедряемся в Flash


В рамках недели ботов для браузерных игр.

Эта неделя богата на статьи о ботах для бразуерных игр.
Во всех статьях для управления ботом использовался AutoIT. Это простой и хороший способ чтобы начать делать бота «в лоб», он не требует никаких знаний об игре, кроме как знания правил и графического интерфейса. Для серверной части игры такой бот вообще будет выглядеть как обычный пользователь, если не брать во внимание невероятную усидчивость и производительность такого игрока.

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

В первой статье я наткнулся на комментарий со ссылкой на пост Adobe Profiler Fail, что побудило меня исследовать эту возможность в целях автоматизации действий в Flash-играх.

Читать дальше: Бот для Flash-игры / Внедряемся в Flash

7 советов инди другим инди

24 августа в день 20 летия независимости Украины, около обеда по Киевскому времени, в Новой Зеландии стартовали продажи игры для iOS Contre Jour.
Эта небольшая игрушка еще до релиза успела нахватать премий.
Первая игра для iOS, получившая номинацию на E3 от GameCriticsAwards. На E3 нет отдельной номинации для мобильных устройств — мобильные игры соревнуются с портативными. И игра в своей номинации соревновалась с Super Mario для 3DS и Uncharted для PS Vita.
Игра признана лучшей мобильной игрой на Е3 изданием GamePro. Вышла в финал аналогичной премии от IGN.
Сейчас — через 2 дня после старта продаж игра имеет титул iPad Game of the Week в AppStore и уверенно движется в топы продаж — сейчас на 4м месте.
Игра разработана маленькой независимой студией из Украины — Mokus.
Фактически за этим ником скрывается один человек — Максим Грынив. Это я. Приятно познакомится.

Для меня эта игра стала новым уровнем, это игрушка, в которую я вложился весь и которой горжусь. Эта игра от начала и до конца сделана на одолженом у друга (дякую, Рома) макбуке. Делая ее, я не только успел истратить под 0 все сбережения, но и сформулировал для себя несколько правил — как сделать хорошую инди игру. Далее мои вам советы — в порядке возрастания важности.


Launch trailer

Читать дальше: Game Development / 7 советов инди другим инди

среда, 24 августа 2011 г.

Mokus. Интервью с первопроходцем

Моим первым допрашиваемым стал mokus,  интервью попытаюсь приурочить к выходу его новой игрушки

Contre Jour в эппсторе.

Досье на mokusа:

Фото Mokus

Имя: Максим Грынив

Возраст: 28 лет

Место жительства: Львов

Чем знаменит: В этом году его игрушка Contre Jour стала победителем в номинации лучшая игра на мобильные устройства на крупнейшей ежегодной выставке компьютерных и видеоигр E3 по версии геймпро

Должен заметить, что я лично впервые запомнил никнейм Максима Грынива после прочтения его первого поста на хабре.  Это было приятный постмортем его игрушки Huje Tower. Честно говоря, у меня еще тогда зачесалось где-то там и я как обычно хотел поспорить с ним о нескольких моментах, которые он описал, но как вы можете понять по фотографии  я поступил правильно просто почесав проблемное место. И вот через несколько лет после событий имевших место быть я взял у него интервью. И причем сделал я это не просто так, а приурочив к выходу его игрушки, которая заслуженно может считаться гордостью нашей игровой  инди индустрии. Ну конечно отбросим прочь мое субъективное мнение и обратимся к людям,  которые разбираются в Играх, а для этого перенесемся ближе к  крупнейшей в мире ежегодной выставке-шоу индустрии компьютерных и видеоигр.

Что для вас, шалопаев, значат эти две закорючки “Е” и “3″? Думаю, большинство из вас только слышали что где-то там, что-то происходит. И чем же крута эта выставка спросите вы? А я вам скажу, что кроме того, что слайдер на их официальном сайте, похож на тот, что у меня в блоге , крута она размахом.  Конечно определяющим является не количество людей, посетивших выставку и не то сколько было участников, а то кто же туда пришел. Если вы взгляните на список заметных компаний, то поймете, что любая компания, которая делает игры и делает их качественно, пришла туда, чтобы показать, что они еще в теме. И вот представьте это полчище гигантов игровой индустрии, кровь, пот и слезы невинных жертв и слабонервных журналистов и маленькая инди игрушка,  которая соревнуется  наравне с остальными и побеждает в своей номинации на геймпро.

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

Ну надеюсь теперь вы понимаете насколько крут этот мужик, у которого я буду брать интервью [...]

Читать дальше: Mokus. Интервью с первопроходцем.

вторник, 16 августа 2011 г.

PHP скрипт для закачки списков видео с youtube.com

Недавно в Facebook’е Павел Забелин кинул ссылку на каналы с видео туториалами, выложенными на youtube.com. Покопавшись я нашёл ещё много других каналов, которые меня заинтересовали, но время смотреть их есть, в основном тогда, когда нет доступа в интернет, поэтому написал скрипт, который скачивает всё видео канала или пользователя в форматах MP4, FLV, WEBM(по приоритету), чтоб [...]

Читать дальше: PHP скрипт для закачки списков видео с youtube.com

понедельник, 8 августа 2011 г.

Создаем html5 мини-бродилку на CraftyJS

Хочу раcсказать, как без особых сложностей сделать свою первую мини игру на html5 (если точнее: js, html5, css).

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

Выглядит это все будет так:
Человечек ходит по полю, между камнями и собирает цветочки, у каждого цветочка есть 1 охранник

Читать дальше: Создаем html5 мини-бродилку на CraftyJS

пятница, 5 августа 2011 г.

Социальные игры: мечты или реальность

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

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

  1. Главное идея — правда ли это?
  2. Что лучше flash или iframe?
  3. Что же все-таки нужно для того чтобы начать разработку?
  4. Какие методы раскрутки наиболее эффективные и как стоит планировать свою маркетинговую деятельность?
  5. Стоит ли привлекать инвесторов или издателей?
  6. Ну, и самое главное, срок окупаемости проекта и возможная прибыль, какова она может быть? [...]

Читать дальше: Социальные игры: мечты или реальность

четверг, 4 августа 2011 г.

Автоматизация сборки 1. ANT для Flash. FAQ

Ant

Вообще тема ANT + Flash очень неплохо раскрыта там, сям. Но тем не менее при личном освоении, некоторые проблемы были мной встречены, и так же героически преодолены. К тому же основная русскоязычная статья от Константинера http://constantiner.blogspot.com/2006/02/flash-apache-ant-new-media.html, на которую есть даже линк на Википедии, технически несколько усторела.

Главная цель — запустить сборку простенького проекта ANT-ом. Начнем.



Настройка среды

  1. скачать, установить ant (http://ant.apache.org/);
  2. еще для запуска ANT понадобиться JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html (который у вас уже есть если стоит Flash Builder);
  3. настроить путь к ANT, через PATH (добавляем переменную среды JAVA_HOME=, компилятор Java. Как это делать в винде: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/environment_variables.mspx?mfr=true );
  4. скачать Flex SDK (если нет) (http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK);
  5. добавляем в ANT возможность выполнения инструкций Flex SDK компилятора: в ant\lib сбросить \ant\lib\flexTasks.jar;
Читать дальше: Автоматизация сборки 1. ANT для Flash. FAQ

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

Эффективная работа в Adobe Flash Professional

При работе в Adobe Flash Professional не следует забывать о производительности и культуре создаваемого содержимого.
Изучив ряд материалов и выслушав пожелания коллег, я пришёл к выводу, что стоит в одном месте опубликовать список основных правил работы во Flash Pro, которые способствовали бы формированию качественного содержимого. Для более глубокого изучения данной темы, настоятельно рекомендую ознакомиться со всеми материалами, ссылки на которые приведены в конце поста.
Эти правила в первую очередь будут полезны аниматорам и сборщиком интерфейсов, однако разработчикам также не помешает ознакомиться.

Полностью актуально для Flash Pro CS5.5 и частично – более ранних версий.

- Не используйте излишне высокую частоту кадров.
Для большинства анимаций достаточно частоты в 24-30 кадров в секунду, а если Ваш проект – это (AIR) приложение, в котором почти нет анимации, то лучше и вовсе ограничить fps до 12, повышая его временно программно до 24-30 только в том случае, если надо показать плавную анимацию. Чем выше fps – тем меньше времени выделяется на исполнение кода, отрисовку и очистку памяти, что зачастую может привести к пропуску этапа отрисовки (в результате чего анимация будет «тормозить»).
Используйте 24 кадра в секунду вместо 120

- Старайтесь располагать элементы «плоско».
Используйте слои вместо контейнеров, когда это возможно. Уменьшая уровень вложенности, Вы увеличиваете производительность

Читать дальше: Эффективная работа в Adobe Flash Professional: "

среда, 13 июля 2011 г.

Типы аддиктивности

Pacman есть пилюлькиАддиктивность - это одна из тех особенностей, которая является одновременно и злом, и благословением игр. Это зло, которое засасывает из реального мира в виртуальный, заставляет игроков нести деньги, тратить рабочее/учебное/семейное время. Многие принципиально не начинают играть, так как боятся "залипнуть".

С другой стороны, аддиктивность "несет" игрока через игровой мир, как на лодке, давая возможность почувствовать новые эмоции, проникнуть в суть игровых механизмов, побывать в состоянии потока ("flow").

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

Типы аддиктивности

понедельник, 11 июля 2011 г.

Генетические алгоритмы для флешеров

Пишет makc3d:
Давным давно в далёкой галактике Балаклаве, как раз перед тем, как уехать с ITSea 2011, я с Ростом пытался убедить знающих людей сделать доклад о генетических алгоритмах, однако все они отказались под предлогом того, что в этой теме слишком много математики. Разумеется, объяснить принципы генетических алгоритмов вполне возможно и без математики - как говорится, на пальцах - что я и попытаюсь сделать в этом посте.

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

Давайте рассмотрим этот процесс на примере решения следующей простой задачи: в начале координат стоит пушка и стреляет под углом 45° снарядом с начальной скоростью v; т.е. уравнения движения снаряда имеют знакомый из школьного курса вид x = vt/√2 и y = vt/√2 - gt²/2. Необходимо найти такое значение v, при котором снаряд упадёт на заданном расстоянии. Эта задача легко решается в явном виде, но в целях этого поста представим себя очень ленивыми математиками и используем генетический алгоритм.

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

Генетические алгоритмы для флешеров

четверг, 7 июля 2011 г.

Пьеса «Разработка многопользовательской сетевой игры.» в 3 частях. Часть 1: Архитектура

Battle cityВ общем, как и обещал, публикую серию статей по разработке многопользовательской сетевой игры. Изначально я хотел просто накатать статейку по разработке серверной части на интересном языке Scala. Но понял, что одной статейкой для развертывания темы не получится обойтись. А писать очередной топик обо всем и ни очем, не хотелось изначально. Поэтому встречайте пьесу в трех действиях. В течении которой мы разработаем архитектуру проекта, реализуем серверную и клиентскую части…
Все помнят прикольные танчики на денди?
Ну вот на примере этих танчиков и будем разрабатывать сервер и клиент.

Читать дальше: Пьеса «Разработка многопользовательской сетевой игры.» в 3 частях. Часть 1: Архитектура

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

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

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

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

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

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

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

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

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

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

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

четверг, 2 июня 2011 г.

Браузерная стратегия «Пути Истории». Архитектура и эволюция проекта

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

Пути Истории — это массовая браузерная стратегическая игра. Проект начинался с энтузиазма одного человека и вырос до серьзного проекта с немалой аудиторией.

Читать дальше: Браузерная стратегия «Пути Истории». Архитектура и эволюция проекта

среда, 1 июня 2011 г.

Flash и HTML5 – друзья, а не конкуренты

Flash и HTML5 рассматривают как конкурирующие платформы. Любители холиваров всегда готовы подробно объяснить, почему одна из них правильная, а другая не имеет права на существование, и должна быть уничтожена. Между тем, эти платформы не совсем конкуренты, и решают довольно разные задачи.

Как это всегда бывает, каждая платформа имеет свои достоинства и недостатки. Интересный момент в том, что в данном случае достоинства одной платформы неплохо компенсируют недостатки другой, и наоборот. Поэтому Flash и HTML5 могут успешно применяться вместе, в одном проекте, и гармонично дополнять друг друга.

Я постараюсь быть беспристрастным, насколько это возможно, при том что я по большей части флэш разработчик :)

Хотел бы отметить такой нюанс: почти все флэш разработчики в какой-то мере имеют дело с HTML и JavaScript, если и не пишут такой код, то понимают, в какой среде работает их приложение. Между тем для большинства JavaScript разработчиков флэш является черным ящиком. Я постараюсь его открыть [...]

Читать дальше: Flash и HTML5 – друзья, а не конкуренты.

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

Тюнинг Canabalt

Была предпринята попытка сохранить оригинальную орфографию, шутки и пунктуацию. И, да, данный пост — перевод статьи создателя Canabalt, не думайте, что игру создал я.

Тюнинг Canabalt

[Эта статья рассматривает технические особенности, соотношения и размеры Flash версии игры Canabalt. Читатель, будь осторожен, статья содержит спойлеры и большое количество цифр!]

Друзья часто спрашивают меня: думал ли я о том, чтобы выложить исходный код моей Flash игры Canabalt в интернет на растерзание и изучение. Они думаю, что для людей будет полезно увидеть, как в игре организована физика и другие вещи. Но я отношусь с опасением к этой идее, на это у меня есть несколько причин, например: исходный код игры написанный за 5 дней, представляет из себя кошмарный и отвратительный спагетти-код, который вряд ли поможет кому-нибудь. Поэтому, из чувства гордости по поводу первого дня рождения Cannabalt, я подумал: «почему бы не написать статью, в которой бы рассказывалось о том, как внутри всё устроено?»

Читать дальше: Тюнинг Canabalt

суббота, 21 мая 2011 г.

Как доделать игру

На блоге одного из создателей Aquaria и Spelunky есть любопытный пост с советами для тех, кто испытывает проблемы с доведением до конца своих игровых проектов. Этот список советов оказался для меня своего рода «зеркалом», в котором отражены многие проблемы, с которыми сталкивался я сам, и я был удивлен тем, насколько хорошо автору удалось уловить суть этих проблем и предложить свои решения, зачастую бескомпромисные.
Закончить игру
Приближаясь к заключительной стадии разработки моей игры, я много думал о том, как завершать выполнение проектов в целом. Я заметил, что вокруг много действительно талантливых разработчиков, у которых возникают проблемы с доведением до конца игровых проектов. По правде говоря, я и сам оставил позади себя ряд незавершенных игр… Думаю, у многих та же ситуация. Не всякий проект удается, по разным причинам. Однако если вы стали замечать, что постоянно забрасываете проекты, которые имеют неплохой потенциал, вероятно, стоит оглянуться назад и изучить тому причины.

Читать дальше: Как доделать игру

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

Разработка браузерной стратегии

Всем привет!

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

Игра The Fate of Nation

Что представляет собой игра? Видимо наиболее коротким описанием будет «клон Цивилизации» =). Но это не значит что у меня не хватило фантазии придумать что-то свое. Просто сделать «Цивилизацию» было моей мечтой. Вряд ли бы я получил столько удовлетворения от написания другой игры. Ну а фанаты Цивилизации наоборот считают, что моя игра совсем не похожа на Цивилизацию, разве что только с виду. Может это и к лучшему.

Игра называется The Fate of Nation http://fatenation.com

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

Для создания игры я использовал php и MySQL на сервере, html и javascript на клиенте. Flash не используется. Из html5 есть только видео на сайте и несколько областей с канвасом в самой игре — включая поверхность карты и мини-карту. Объем кода клиентской части в несколько раз превышает серверную часть, поэтому в основном буду рассказывать о клиентской разработке, но начнем с сервера.

Читать дальше Разработка браузерной стратегии

пятница, 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, я решил рассказать и показать, что у меня из этого получилось.

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

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

Игра за два дня

Как-то здесь на хабре была заметка о мероприятии про игру за два дня. Предлагалось зарегистрироваться, найти себе команду (всех тех, кого раньше не хватало), вспомнить старые залежавшиеся задумки, укрыться от внешнего мира на два дня и реализовать игру. Идея мне понравилась, и мне сразу захотелось попробовать ее на практике.

Вот несколько скриншотов того, что получилось:
Игра Papa Penguin 1 Игра Papa Penguin 2 Игра Papa Penguin 3 Игра Papa Penguin 4

Читать дальше: Game Development Игра за два дня

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

Вот решил выложить свои классы по работе со звуком и музыкой. Они у меня уже не менялись где-то четыре игры подряд, так что можно считать, что их функционал подходить под большинство игр. Классы используют выкладываемые ранее модули 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: [...]

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

среда, 13 апреля 2011 г.

Текстурирование спрайтов с помощью (dis)placement map

Текстурирование спрайтов с помощью (dis)placement map
Недавно, ковыряя с целью исследования один чужой проект, наткнулся на весьма любопытную и в то же время — очень простую технологию. Сразу скажу, что ковырял я флэшку, но данная технология может быть использована не только во флэше, а вообще — где угодно.

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

Суть в том, что в изучаемой мной игре есть большое количество анимированных спрайтов человечков (как я изначально считал — заранее отрендеренных). Человечки разные (по-разному одетые, разных цветов и т.п.).

Читать дальше: Game Development / Текстурирование спрайтов с помощью (dis)placement map

Вода

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

Читать дальше: Вода

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

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

вторник, 5 апреля 2011 г.

Готовь яхту к лету: открыта регистрация и предоплата проживания на ITSea-2011

Готовь яхту к лету: открыта регистрация и предоплата проживания на ITSea-2011:

ITSea logoКак мы и предупреждали в отчете об ITSea 2010, следующая конференция морских программистов, ITSea 2011, состоится на берегу Черного Моря c 4 по 10 июля в Балаклаве. База - мотель 'Листригон', у которого на сайте есть масса флэш-панорам с видами, например, вот - флэш-панорама конференц-зала - чтобы увидеть ее и ссылку для регистрации на ITSea-2011, просим пройти под кат [...]

Тренинги по Flex от Farata Systems

Тренинги по Flex от Farata Systems:

Реклама и пиар. Я сам буду участвовать в мастер классе.

Эксперт в области Adobe AIR & Flex, компания Farata Systems, анонсировала два тренинга по технологии Adobe Flex, которые пройдут с 20 по 24 июня в Минске.

Введение в программирование с Adobe Flex (20-22 июня)

Во время этого 3-х дневного тренинга вы научитесь разрабатывать насыщенные интернет-приложения (Rich Internet Applications) с использованием Adobe Flex. Вы также познакомитесь со способами коммуникации с серверной стороной написанной либо на языке Java с помощью BlazeDS, либо с любым другим сервером способным понимать HTTP запросы.

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

Дополнительная информация о тренинге: http://www.eventbrite.com/event/1473073001

Мастер Класс: Enterprise Development with Adobe Flex (23-24 июня)

За 2 дня тренеры ознакомят вас с лучшими практиками (best practices) разрабoтки насыщенных интернет-приложений для предприятий с использованием Adobe Flex. Вы познакомитесь с принципами разбивки больших приложений на модули, с автоматизацией создания CRUD приложений, шаблонами программирования применимыми к Flex, интеграцией BlazeDS с такими популярными Java фреймворками как Hibernate и Spring.

После освоения материалов этого курса вы будете более эффективно работать на проектах, где используется Flex.

Дополнительная информация о мастер классе: http://www.eventbrite.com/event/1475570471

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

Инструкторами на данных тренингах выступят Yakov Fain и Victor Rasputnis, управляющие директора компании Farata Systems.

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

[...]