+183.33
52 читателя, 99 топиков

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

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

Обновление Alternativa3D и спецификация формата A3D

В новой версии мы добавили парсер формата 3DS, добавили метод поиска пересечения луча с геометрией, реализовали экспорт в бинарный формат.
Скачать 8.17.0 версию движка.

Бинарный формат A3D теперь поддерживает скины и источники света.
Скачать спецификацию формата A3D.
Скачать плагин для экспорта в A3D формат из 3DSMax 2010.
Скачать плагин для экспорта в A3D формат из 3DSMax 2011.

Также ряд изменений претерпел просмотровик моделей editor.alternativaplatform.com.
Читать дальше →
  • +4

Растровый рендер (анимация + движение + поворот)

Здравствуйте.

На FGB есть статьи посвященные растеризации и растровому рендеру.
1. flashgameblogs.ru/blog/actionscript/667.html
2. flashgameblogs.ru/blog/actionscript/713.html
3. flashgameblogs.ru/blog/actionscript/717.html
Спасибо авторам и надеюсь, они не против использования их статей и исходников в разработке. Копирайты из исходников сохранены. Эти 3 статьи легли в основу движка о котором эта статья.

Задача:
Двигать по полю размером 1280х1200 (видимая область флешки 640х600) юнитов с анимацией в разных направлениях с максимальной производительностью. Изначально юниты в векторе.

Решение:
Нужно объединить растеризацию MovieClip (1 статья) и растровый рендер (2 и 3).
Читать дальше →

Рефакторинг и оптимизация растрового рендера

Рефакторинг – это улучшение читаемости кода без изменения его функционала.
Оптимизация – увеличение эффективности работы программы.

В этой публикации я хочу на небольшом примере показать, как происходит рефакторинг и оптимизация. Никакой теории не будет, так как она уже давно описана в большом количестве книг. Перейдем сразу к практике. Для примера возьмём симпатичную флешку из публикации Растровый рендер в as3. Двигаем тысячи картинок с разрешения Platon. Если посмотреть на код, то можно увидеть, что внутри не всё так симпатично. Это нам и нужно. Предлагаю не закрывать статью по ссылке выше, чтобы исходный код был у вас перед глазами. Будем улучшать.
Читать дальше →

Растровый рендер в as3. Двигаем тысячи картинок

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

Применение метода достаточно широко — от реализации партиклов и до полной отрисовки всей графики. Из плюсов — производительность и плавность. Из минусов — сложнее вносить разнообразные искажения, а так же отрисовывать анимацию.
Читать дальше →

Определение размера клипа с учетом эффектов

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

Хочу поделиться приемом, который позволяет достоверно узнать габариты клипа с учетом примененных фильтров (только симметричных типа glow и blur, возможное смещение в shadow не учитывается). Моя реализация рассчитана на AS 2, но, для третьего, я думаю, она тоже подойдет, тут главный прикол в принципе, а он прост:
Читать дальше →

Растеризация MovieClip в последовательность BitmapData

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

UPD: Расширил черновую битмапу, чтобы учесть возможные заступы из-за фильтров.
UPD 2: getColorBoundsRect оказался излишне медленным, когда он работает на большой битмапе (спасибо Эду Рыжову, который это заметил). То-есть, когда черновая битмапа становится, скажем 1024 на 1024, из-за большой картинки, а последующие картинки рендерятся маленькие, то сильно теряется время. Но без getColorBoundsRect обойтись нельзя, если вы используете маски. Я попробовал каждый раз пересоздавать черновую битмапу и оказалось, что выделение памяти настолько быстро, что общее время теперь не сильно отличается от времени без использования getColorBoundsRect вообще. На моем текущем проекте старый вариант занимал 2400ms, новый 700ms, без использования черновой битмапы и getColorBoundsRect 685ms. Обновил код и инструкцию.

Читать дальше →

Асинхронный A* (часть 2)

n0uk написал статью как использовать Асинхронный A*. Я хочу привести наглядный пример, как использовать данные классы в своих играх.
поиск пути
Читать дальше →
  • +15

Обещанный мой SoundManager

В посте о SoundManager камрада jarofed я рассказал какие требования к этом классу у меня:

Цитата:
… А основные сложности и возня у разработчика возникают тогда, когда надо организовать честную паузу, следить за количеством каналов и менеджить их по приоритетам (а не просто глушить несчастливый канал, например у меня одновременно идет перестрелка, взрывчики и один ярко выделяющийся на фоне старт баллистической ракеты — если число каналов переполнилось, то убрав один из выстрелов я мало что потеряю, а вот если заглохнет резко один выделяющийся старт ракеты, то это fail).

Потом, а что делать с зацикленными спецэффектами? Например едет танчик, пока он жив — крутится по циклу жужжание мотора и гусениц. Надо запоминать того кто вызвал спецэффект и уметь принудительно его останавливать.

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

Далее, громкость при произвольном накоплении большого количества однотипных звуков начинает уходить в хрип. Это тоже надо менеджить, в частности проверять, а не произошел ли звук одновременно с таким-же по времени и рядом по позиции? Тогда запускать только один, и подхачить громкость соответственно, но не до хрипа.

Плюс еще всегда хорошо для однотипных часто повторяющихся звуков (выстрелов, попаданий итп) — иметь некоторый набор звуков. Иначе в ухо начинает резать. Соответственно, в коде запуск такого звука — это вызов метода с передачей типа «попадание_в_плоть». А уже менеджер рандомно пустит что-то из набора.

Несколько камрадов высказали желание глянуть на мою реализацию. Я минимально прокомментировал код и выкладываю.
Читать дальше →

Контроль десктопного приложения с помощью мобильного устройства (p2p)

Видео c AdobeTV в котором наглядно рассказывается о создании мини-приложения для десктопа и мобильного устройства, с помощью которого в результате можно управлять десктопным приложением, соединение осуществляется через p2p.
Читать дальше →