Эффект - волна блика. How It's Made.

Салют, братья!
Долго копится желание написать что-то полезное для сообщества, такое, чтобы было не стыдно показать свой код :)
В продолжение серии How It's Made, хочу рассказать о том как я сделал эффект волны блика, или скользящего блика если угодно.
Эффект волны блика по рамке поля в игре Mandallapse (в дебаге с BlendMode.MULTIPLY вместо SUBTRACT)

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

Adobe AIR + Nape Physics. Разработка под iOS.

Итак, недавно я купил Mac mini, т.к. давно мечтал заняться портированием одной из своих игрушек под iOS. Вопрос стал в выборе платформы, и я какое-то время склонялся к Adobe Air, пока не копнул глубже…



На днях у нас была локальная «конференция» из пяти человек в одном из питерских баров KillFish. И там мы обсудили мельком и Air, и Unity, и Cocos2d, и прочее… Я голосовал за AIR, т.к. думал, что раз уж «Angry Birds: Star Wars» сделана на Starling + Air, и она летает с приличным количеством физики и эффектов — значит, это мой выбор! Тем более, многие видели демки на Starling, где в iOS мы наблюдаем сотни анимированных объектов со стабильными 60 fps. Но на деле… всё упирается в физику.

З.Ы. ДАННЫЕ В СТАТЬЕ ОБНОВЛЕНЫ!!!

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

Pixel Bender фильтр «Flipping Hexagons» для Flash

Сделал новый транзишн, который можно использовать для смены экранов в игре, например :)

Pixel Bender filter «Fpipping Hexagons» для Flash

Исходники фильтра и уроки по его созданию на очереди.
А пока смотрите демку, качайте, пользуйтесь.

Неточности и погрешности при работе с Number. Чем это грозит и как решить?

Данная публикация является адаптированным переводом статьи о десятичных числах с моего блога.
Наверное, большинство камрадов сталкивались с непонятными «артефактами» и неточностями при работе с переменными типа Number. Попытайтесь умножить 0.1 на 3 и вы поймете, о чем идет речь. Хотя здравый смысл подсказывает, что результат должен быть 0.3, все же, как оказывается, алгоритмы AS3 не всегда поддаются логике и выдают что-то наподобие 0.30000000000000004.

round decimal numbers
Оказывается, такая погрешность возникает вследствие ограничения размера памяти, которую AS3 выделяет для хранения переменной Number. Если бы такого ограничения не существовало, банальная попытка сохранить значение числа «Пи» привела бы к полному истощению ресурсов.
Читать дальше →

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

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

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

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

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

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

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

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

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

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

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

Прототип 3D сокобана на движке Alternativa3d

Хорошо известный итальянский блогер Emanuele Feronato выложил два поста с прототипом игрушки сокобан.

Flash 3D Sokoban prototype with Away3D
Flash 3D Sokoban prototype with Flare3D

В своих прототипах он использовал Away3d и Flare3d.
Я решил подхватить эстафету и сделать простейший сокобан на движке альтернативы.
Читать дальше →

Pixel Bender filter «Normal Mapping» для Flash

Собственно решил изучить Pixel Bender. Быстро попробовав различные математические формулы, решил попробовать сделать что нибудь более крутое. Как раз на одном из моих «родных» форумах, обсуждали написание различных пиксельных шейдеров. Не без помощи одного из «продвинутых» участников форума, я смог написать этот шейдер. Давнишняя моя мечта на самом деле. Пример+исходник под катом.

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

Pixel Bender filter «Slide Wring» for Flash

Не обессудьте за английское название — но по-русски выходило как-то слишком «запятаясто».
Недавно написал shader для Flash, которого достаточно для достижения вот такого эффекта:

Pixel Bender filter «Slide Wring» for Flash

Фильтр может пригодиться для оформления игр или других приложений: фотогалереи, слайд-шоу, баннеры наконец. Только следите за нагрузкой — больно уж прожорливая цаца вышла.
Смотрите демку, качайте, пользуйтесь.