четверг, 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).

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