Есть известный прием для оптимизации скорости отрисовки векторной анимации на экране, а именно: перегонка мувиклипа в последовательность битмапдат.
Последние дни обнаружилось, что реализация этого приема вызывает некоторые одинаковые трудности даже не у одного камрада. В частности появляется дрожание. Поэтому, после первого обращения я решил позже выложить свою реализацию. А после второго решил, что плохо медлить :)
UPD: Расширил черновую битмапу, чтобы учесть возможные заступы из-за фильтров.
Итак, раз это итоги по первой флеш игре, поэтому наверно хорошо бы рассказать как я пришел во флеш-инди.
На самом деле пришел не на пустом месте, играми я профессионально занимаюсь уже 8 лет. За это время удалось поучаствовать в разного калибра проектах, от «Периметра» до казуалок. Большую часть времени я работал лид-программером. Но остальной опыт переоценить сложно. Например, до геймдев-индустрии я думал, что знаю фотошоп. А потом, посидев всего пол-часа за спиной главхудожника и посмотрев как он работает — я продвинулся в фотошопе на столько-же, сколько знал до этого.
Таким образом, к моменту выпуска «Musaic Box», я подтянул разнообразные скиллы, от управления/планирования, до общения на английском с издетелями. А ведь для инди-флеш-девелопера как раз это все очень в тему: уметь дизайнить, программировать, рисовать, управлять собой хотя-бы, общаться со спонсорами…
Как я вроде знаю secureSWF самая мощная программа защиты флешки. По крайней мере везде где я читал/слышал исключительно рекомендуют ее. Это и в докладах по защите и в статьях, на хабре например.
Я ее купил соответственно, самую навороченную версию. Обфусцирует она скорее всего действительно на 5, вставляет мусор и гадости тоже. Но вот у нее есть несколько встроенных фич, например — сделать сайтлок, зашифровать строки, которые в явном виде. Так вот, если обфускация необратима полюбому, то сайтлок можно взломать. И дальше ломать остальные игры уже зная что и как.
Так вот хочу предупредить, скорее всего китайцы уже умеют ломать сайтлоки secureSWF на потоке. То-есть, старайтесь дополнительно ставить свой сайтлок, желательно хитрый (если каждый будет хитрить по своему — не будет стандартного способа у китайцев).
В это трудно поверить. Здесь и на форуме я с самого их рождения. Многие за это время выпустили не одну игру. А моя эпопея с первой игрой только вот сейчас завершилась.
Год разработки, очень успешная продажа и… год простоя у спонсора в ожидании микроплатёжного АПИ. Идею микроплатежей наконец отменили и, вот он релиз! Несмотря на то, что жирную flat часть гонорара я получил еще год назад и поэтому не сильно парился от простоя, тем не менее, сам того не замечая я тяготился этой ситуацией. Ибо это как не рожденный ребенок. Я уверен любому разработчику нужна подпитка энергии от восторгов играющих по миру миллионов людей.
И вот игра вышла в свет! Неделя эксклюзива на bubblebox и потом дистрибуция.
Рассказ о разработке и итоги будут позже, наверно после месяца дистрибуции. Ну или про разработку может раньше сподоблюсь.
В посте о SoundManager камрада jarofed я рассказал какие требования к этом классу у меня:
Цитата:
… А основные сложности и возня у разработчика возникают тогда, когда надо организовать честную паузу, следить за количеством каналов и менеджить их по приоритетам (а не просто глушить несчастливый канал, например у меня одновременно идет перестрелка, взрывчики и один ярко выделяющийся на фоне старт баллистической ракеты — если число каналов переполнилось, то убрав один из выстрелов я мало что потеряю, а вот если заглохнет резко один выделяющийся старт ракеты, то это fail).
Потом, а что делать с зацикленными спецэффектами? Например едет танчик, пока он жив — крутится по циклу жужжание мотора и гусениц. Надо запоминать того кто вызвал спецэффект и уметь принудительно его останавливать.
Кроме того, тюнить громкость и стереобазу каждого эффекта в аудиоредакторе это неверно (да и долго), поэтому каждый саунд должен импортироваться нормализованным и в коде в библиотеке должен иметь связанный с ним саундтрансформ.
Далее, громкость при произвольном накоплении большого количества однотипных звуков начинает уходить в хрип. Это тоже надо менеджить, в частности проверять, а не произошел ли звук одновременно с таким-же по времени и рядом по позиции? Тогда запускать только один, и подхачить громкость соответственно, но не до хрипа.
Плюс еще всегда хорошо для однотипных часто повторяющихся звуков (выстрелов, попаданий итп) — иметь некоторый набор звуков. Иначе в ухо начинает резать. Соответственно, в коде запуск такого звука — это вызов метода с передачей типа «попадание_в_плоть». А уже менеджер рандомно пустит что-то из набора.
Несколько камрадов высказали желание глянуть на мою реализацию. Я минимально прокомментировал код и выкладываю.
Однажды столкнулся я с проблемой — нужно остановить мувиклип перед тем, как положить его обратно в пул. Чтобы гад не крутился там в небытии и не жрал ресурсы. Однако метод stop() останавливает только таймлайн самого мувиклипа, а все мувиклипы-дети, которые на нем крутятся — продолжают крутиться. Например, если у вас есть клип «танк», в котором есть анимация кручения гусеницами, но дополнительно в нем есть клип «человечек в люке», который машет флажком. То после метода stop() на танке гусеницы остановятся. А человечек все машет и машет, машет и машет. Танк может уже удалили, но пока его не зачистил гарбадж коллектор — он машет и машет, проц напрягается и напрягается. А если у вас реализован пул танков, то сотни танков в пуле и на каждом человечек машет и машет флажком… Ужос!
До CS5-го флеша бинарный формат файла флеша был практически не читаемым. Это приводило ко многим неудобствам. Начиная от хранения этого бинарника в системе контроля версий, до восстановления поломанного файла или внесения массивных однотипных изменений.
И наконец Адоби порадовали — можно сохранять в ИДЕ не бинарный файл FLA а папку с ясными и понятными файлами проекта. Более того, FLA формат CS5 это просто zip такой папки. Ура? Частично да, но в бочке меда оказалась не одна лопата дегтя.
Сначала — какие плюсы мы таки неоспоримо обретаем?
Под катом голая новость. Никакой отсебятины. Кому новость уже ранее намозолила — можете не ходить не читать. Кому надо личных откровений и шишек — их нет там, можете не ходить.
Так зайдите на форум, он специально для этого. Зачем делать исключения, если можно зашариться на форум (раз время и желание есть пообсуждать что-то эдакое...}
ну хоть что-нибудь расскажи, реально интересно же, и я уверен не только мне :)
А автору цитаты анреспет — какая разница сколько игр сделано, главное чтобы...}
ну обман скорее психологический :) скачивая Angry Birds за бесплатно — ты ожидаешь полную версию Angry Birds (просто тебе повезло и игра сегодня бесплатная :) такое ...}
На 50 коментов ни одного с критикой.
Генератор уровней по-моему сыроват, из-за этого игра местами хардкорная:
Трамплин иногда запускает игрока прямиком ...}
Нет возможности читать вам лекции, тематических книг очень много. Вкратце.
Предсказания будущего — это громко сказано. На 90% (допустим) все события в бу...}