
Время - назад!
1
Ня! Тоже решил поддаться всеобщему литературно-повествовательному настрою и черкнуть пару строк.
Последовательность событий такая:
Участвовали в Y8-конкурсе -> Выиграли -> Многие спрашивают, как я сделал эффект перемотки времени назад.
Чтобы не расписывать каждому отдельно, решил рассказать здесь.

Они объявили, сроки — с 9ого по 16ое, мы целый первый день убили на придумывание игры. Было скучно и переживательно. Хотелось не участвовать. Но после окончательной придумки «стреляем тридцать секунд, а потом всё заново, но на уровне есть я из прошлого» решили доделать до конца.
Не буду особо рассказывать как делалась игра, какие переделки мы вносили, как кранчевали. Мне кажется, зачастую от таких рассказов можно уснуть…
Просто скажу, что в такие сжатые сроки было адски-сложно довести ее до финального состояния. За меня скажут мои помидоры ;) До этого я работал по пять штук в день, но во время конкурса приходилось чертовски перерабатывать:

Забавно, но эта фишка сделалась быстро (11ое марта, два последних ночных помидора). Хотя вся игра делалась с нуля на голом флеше (из старого кода использовал только растеризацию), но смех в том, что больше всего времени убил 16ого числа на рандомную компоновку этажей… Итак, про перемотку. Стоп-кадр перемотки выглядит так:

Многих интересуют вот эти классные полоски-искажения, а-ля перемотка на старых видеопроигрывателях.
Делаю так:
1. Во время игры я сохраняю каждый десятый кадр. Рендер в битмат-дату. Всё это барахло отъедает более 100Мб оперативки.
2. Когда нужно отмотать время назад — я начинаю рисовать эти битмап-даты в обратном порядке.
3. Теперь самое интересное — искажения. Процесс отрисовки одной битмап-даты выглядит так:
Уф-ф-ф… Вот, собственно, и всё. Магия закончилась.
Перенести такой подход на мобильные девайсы не получится — слишком много оперативки отъедает. Да и рисовать их потом накладно. Тот же copyPixels не пройдет. Видимо нужны шейдеры + тупое сохранение всех-превсех состояний объектов.
В итоге наша игра выиграла. Было дико неожиданно узнать о победе! Фантастика на самом деле.
Я уже рассказывал про своё садо-мазо увлечение. Скажу одно — пока дела складываются нормально. К предыдущему переключателю добавился сосед:

Приходится его переключать для компиляции в полный экран на десктопе (кстати, кто-нить знает как в FDT шарить исходники для нескольких проектов?)
Правда игру для тестов я выбрал неудачно. Стратегия — не то, с чего нужно начинать. Поэтому сейчас забросил это дело и подчищаю хвосты — делаю сайтлоки, плачу квартальную бухгалтерию, договариваюсь о продаже Time Hotel.
Из-за всей этой суматохи с конкурсом я выбился из колеи. Уже и не думаю о том, чтобы привезти какую-нибудь новую игру на конференцию. Буду просто тусовать… но ведь все будут мериться писями! Что же делать? Подумываю о том, чтобы записаться на операцию по удлинению. Безпроигрышный вариант.
На этом всё… Пойду прикуплю штанцы посвободнее! Трам-парам-пурум.
Последовательность событий такая:
Участвовали в Y8-конкурсе -> Выиграли -> Многие спрашивают, как я сделал эффект перемотки времени назад.
Чтобы не расписывать каждому отдельно, решил рассказать здесь.

Y8-конкурс
Они объявили, сроки — с 9ого по 16ое, мы целый первый день убили на придумывание игры. Было скучно и переживательно. Хотелось не участвовать. Но после окончательной придумки «стреляем тридцать секунд, а потом всё заново, но на уровне есть я из прошлого» решили доделать до конца.
Time Hotel
Не буду особо рассказывать как делалась игра, какие переделки мы вносили, как кранчевали. Мне кажется, зачастую от таких рассказов можно уснуть…
Просто скажу, что в такие сжатые сроки было адски-сложно довести ее до финального состояния. За меня скажут мои помидоры ;) До этого я работал по пять штук в день, но во время конкурса приходилось чертовски перерабатывать:

Эффект перемотки
Забавно, но эта фишка сделалась быстро (11ое марта, два последних ночных помидора). Хотя вся игра делалась с нуля на голом флеше (из старого кода использовал только растеризацию), но смех в том, что больше всего времени убил 16ого числа на рандомную компоновку этажей… Итак, про перемотку. Стоп-кадр перемотки выглядит так:

Многих интересуют вот эти классные полоски-искажения, а-ля перемотка на старых видеопроигрывателях.
Делаю так:
1. Во время игры я сохраняю каждый десятый кадр. Рендер в битмат-дату. Всё это барахло отъедает более 100Мб оперативки.
2. Когда нужно отмотать время назад — я начинаю рисовать эти битмап-даты в обратном порядке.
3. Теперь самое интересное — искажения. Процесс отрисовки одной битмап-даты выглядит так:
- Сначала делаю copyPixels всей битмап-дате. Получается кадр без искажений.
- Затем поверх я рисую полоски. Беру куски из оригинальной картинки и рисую через copyPixels на экран, при этом делаю небольшой сдвиг влево-вправо. Получается, я рисую полоски поверх «кадра без искажений».
- Затем рисую в том же месте еще одну полоску, но поуже и с бОльшим сдвигом. Приглядитесь на скрин выше — из-за такого приема торцы искажений выглядят более дугообразными по форме
- Затем сдвигаю полоски вверх или вниз. Имеется ввиду просто число «теперь полоска в координате y+10». У каждой храню просто рандомную скорость. Так они ползают во время перемотки.
- Если полоска дошла до границ экрана — перекидываю обратно, чтобы она продолжила искажать картинку.
Уф-ф-ф… Вот, собственно, и всё. Магия закончилась.
Перенести такой подход на мобильные девайсы не получится — слишком много оперативки отъедает. Да и рисовать их потом накладно. Тот же copyPixels не пройдет. Видимо нужны шейдеры + тупое сохранение всех-превсех состояний объектов.
В итоге наша игра выиграла. Было дико неожиданно узнать о победе! Фантастика на самом деле.
Мой велосипед
Я уже рассказывал про своё садо-мазо увлечение. Скажу одно — пока дела складываются нормально. К предыдущему переключателю добавился сосед:

Приходится его переключать для компиляции в полный экран на десктопе (кстати, кто-нить знает как в FDT шарить исходники для нескольких проектов?)
Правда игру для тестов я выбрал неудачно. Стратегия — не то, с чего нужно начинать. Поэтому сейчас забросил это дело и подчищаю хвосты — делаю сайтлоки, плачу квартальную бухгалтерию, договариваюсь о продаже Time Hotel.
DevGAMM
Из-за всей этой суматохи с конкурсом я выбился из колеи. Уже и не думаю о том, чтобы привезти какую-нибудь новую игру на конференцию. Буду просто тусовать… но ведь все будут мериться писями! Что же делать? Подумываю о том, чтобы записаться на операцию по удлинению. Безпроигрышный вариант.
На этом всё… Пойду прикуплю штанцы посвободнее! Трам-парам-пурум.
- +19
- Lampogolovii
Комментарии (17)
(ну вот, уже мериться начали)))))
Конкурсная версия.
работаю над небольшими косметическими улучшениями…
как раз отматывание времени назад и реализовано сохранением битмап. то есть объекты не умеют сохранять свои состояния (позиции, повороты, прозрачность) и отмотка в духе «я сейчас буду объекты обратно двигать» не вышла. вот я и прибег к простому выходу — сохраняю кадры-картинки.
p.s. при подходе «сохранять стейты объектов» памяти, конечно, меньше требуется. но заморочек больше. например, как сохранять частицы? освобождать неиспользуемые уже не получится… ибо они должны хранить весь путь своей жизни.
Идея с своим «призраком» хорошая. Вспомнила призрака в гонках!
ПОЗДРАВЛЯЮ!!!
при сохранении кадров для эффекта перемотки, сохранять их в 2 раза сжатыми по высоте. Т.е. размер занимаемой памяти сразу ополовинивается.
А при воспроизведении — рисовать строки через одну (пустые строки оставлять черными или копировать предыдущую с понижением яркости) — полосатость будет естественным образом напоминать interlaced режим, в котором как раз старинные видаки и телевиденье работают.