Вскрытие Kindom Rush

Маленькая такая заметочка, поэтому в персональный и пишу.

Короче попросил меня знакомый художник вскрыть KR и скинуть ему графику чтобы поучиться. Каково же было моё удивление, когда я увидел покадровую анимацию в картинках всех персонажей, растровые фон, иконки и всё остальное. Теперь мне понятно откуда взялись 22 метра веса. То ли они не знают про программную растеризацию или им было не до этого.

Короче к чему я это всё? А к тому, что ещё раз убеждаюсь, что технология не так важна, главное чтобы игра была интересной!
  • +4

Комментарии (87)

+3
Или сразу растр, или другой вектор.
Хотя от картинок так сильно веет родным ide, что я сам в эти варианты не верю ;D
0
прав. Флеш однозначно.
0
Ну вот, а если бы сделали программную растеризацию, то игра весила бы 3-5мб, и в случае виральной версии игры (которой, если я не ошибаюсь, так и нет), маленький вес игры пошел бы только в плюс! Кстати, перегнать вектор в растр в ручную, даже с использованием сторонних программ, тоже тот еще труд :)
0
перегнать и потом долго и нудно расставлять в кадрах картинки с анимацией.

Без музыки может и весила бы 3-5.
0
Тоже ради любопытсва расковырял, у них там оказывается не только «ручная растеризация», но и еще все в лучших традициях AS2.0 :)
0
это как? ковыряю ещё раз… :)
0
Раскрыл. Параметры экспорта: AS2. Это что, они на ас2 такую глыбу построили?
0
не ну какой AS2, там AS3. Вот вижу this.x = param1.x; this.scaleY = this.scaleY — this.fadeSpeed; Какой же это AS2?

а про «в лучших традициях AS2.0» я что-то не понял. Может потому что с ним почти не работал :)
0
Думаю имелось в виду использование процедурного подхода вместо ООП, а не синтаксис.
0
В AS2 есть все элементы ООП…
0
То ли они не знают про программную растеризацию или им было не до этого.
Возможно перегнали сразу в растр чтоб не ковыряли всякие — а из вектора нарезки делать и в свои фоны вставлять элементы я думаю многие смогут. Анимацию не перегоняли в растр — векторная всегда круче растеризованной: у них там все такое мелкое, что только вектор спасет.
  • osa
  • osa
+1
Откройте да посмотрите. Там полная раскадровка на каждого врага. Вектор хорош скейлингом, а если размер фиксирован — пофиг что это и насколько мелкое. Те же кадры, те же пиксели.
+1
зато когда потом под айфон портируешь ничего перерисовывать не надо, все уже готово
+1
Что значит не надо, нужно сделать под необходимое разрешение, и если вектор можно просто растянуть и сохранить, то растр придется обработать.
0
а это уже Проблемо
0
рисуешь все спрайты сразу в большом разрешение, потом соответственно уменьшаешь под любой девайс
+1
И получаешь груду пикселей :D. Не говоря уже о том, что рисование в большом разрешении трудозатратно.
0
да ладно, уменьшить в 2 раза и получается груда пикселей? не знаю чем вы там уменьшаете, фотошоп справляется с этим отлично
+1
Если картинку размером в 2000x2000 уменьшить до 1000x1000, то разница для глаза будет незначительной. А если 20x20 уменьшить 10x10, то, скорее всего получится каша. И кто сказал, что придется уменьшать вдвое? Разрешение iPad 3 и разрешение iPhone 3GS отличаются в 5 раз.
0
какие то они у вас не логичные получаются создатели KR, то они о растровом рендере не знают, то вдруг год назад смогли предвидеть появление айпада с ретиной. Я всего лишь хотел сказать что у них могли быть свои причины юзать спрайтшиты, а не только незнание
+1
какие то они у вас не логичные получаются создатели KR, то они о растровом рендере не знают, то вдруг год назад смогли предвидеть появление айпада с ретиной
Зачем приписывать мне то, что я не говорил?

Я всего лишь хотел сказать что у них могли быть свои причины юзать спрайтшиты, а не только незнание
Конечно могли быть и свои причины. Но вероятнее всего просто не знали. Но рисовать в векторе, потом сохранять в растре и пхать во флаху, выглядит странным.
0
Я не думаю что они рисовали в векторе. Логичнее предположить что сразу все рисовали в растре.
+2
У них каждый мазок — родная ide.
0
Да, выглядит рисованным в IDE.
0
всё проще. Ставишь CS5.5, рисуешь в векторе, потом всю анимацию разбиваешь на ключевые кадры и каждый волшебной кнопочкой «Convert to Bitmap» превращаешь в растр.
0
У этих ребят китайцы уже один раз воровали ассеты из игры Clash of the Olympians для iOS клона и они очень долго не могли заставить Apple удалить игру из App Store. Думаю, что в этом причина растеризации всего и вся.
0
не смотря на это всё равно своровали) ironhidegames.com/post.php?id=38
+1
Как страшно жить…
+6
Из уст Балаково Артс это звучит как угроза ;D
0
Мы не Балаково Артс, а Black Square. А бояться можно уже начинать :D
+13
No comments.

0
Совпадение!
0
Problem? :D
+4
зубчики в другую сторону.
0
ржунимагу)
+1
Клептомания :D.
0
конспирация или дочернее предприятие :D
0
А чем растр спасет от воровства?
0
Тем, что он, в случае с Kingdom Rush, низкого разрешения.
0
700x600
Ипад2 1024х768, ифоны еще меньше, вполне реально использовать, имхо.
0
а ещё есть андроид…
0
Много андроидов с разрешением больше 1024*768?
0
без понятия. Но вывод простой: захотят стырить — стырят. Надо выпускать первым
+2
технология не так важна, главное чтобы игра была интересной!

отлично сказано
0
Дремучие дебри в коде с структуре это тоже защита))
0
я так каждую игру обфусцирую
0
Вообще, не читал много… но половина тутошних даже не поняло зачем так делается :) Называется битлинг, когда есть набор кадров в одной картинке. Таким образом можно очень серьезно ускорить игру :) Снизить тормоза и прочее. А если ты еще портировать её хочешь (как сделали с этой игрой) то у тебя и проблем почти не будет :) Тем более не вся анимация рисуется в векторе )
0
Где уж «тутошним». Никто же статей на блогах не читает.
За разъяснения спасибо, но блиттинг это не набор кадров в одной картинке)))
И программная растеризация ему не помеха.
0
Короче говоря ) почитайте ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%B8%D1%82%D1%82%D0%B5%D1%80

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

Техника особенно успешно используется на мобильных устройствах, где не стоит разбазаривать лишние ресурсы процессора )
0
тю, ну а что мешает сделать программную растеризацию и оформить её как загрузку уровня? www.ant-karlov.ru/iz-vektora-v-rastr.html
0
Вы сами-то читали? Я не увидел там blitting == spritesheet.
+1
«его надо сначала загрузить в проц, там посчитать и назад выдать.»
Ужос-ужос :)
Вот у меня есть на финале игрушка, 50 персонажей со всей анимацией ( от 15 до 40 кадров на 5-7 состояний для каждого) + набор спецэффектов, порядка 60-ти, разной степени заполненности.

И ничего. С прелоадером растеризуются и кешируются основные юниты, и спецэффекты, и далее уже подгружаем уже новые объекты, распарсивая содержимое очередного уровня.
Все грузится быстро и незаметно для игрока.
0
ну вот нормальный ответ практика. Теперь айПада не боюсь, буду покупать. Спасибо
+6
Ерунду написал.
0
тю, ну а что мешает сделать программную растеризацию и оформить её как загрузку уровня?

Никто не платит за долгие загрузки. Это я как со стажем на AppStore говорю. Юзеру лучше один раз загрузить большой файл чем каждый раз ждать пока он загрузится или сконвертируется. Надо оптимизировать всё максимально плотно. Тем более не стоит забывать, что Gargbage Collector во флеше еще не идеален.

Вы сами-то читали? Я не увидел там blitting == spritesheet

А я и не говорю, что это одно и тоже. Спрайтщит — все догадываются. Это набор кадров в рамках одного изображения.
А вот как эти кадры чередовать — я это назову блиттингом. Берем квадратик, вырезаем из него кусок. Смещаемся дальше и так по кругу в рамках той скорости обновления, в какой надо.

Так делали еще 10 лет назад не просто так. Битмапу куда быстрее просто офсетить, чем каждый раз её отрисовывать заново.

Ерунду написал. 
Где именно?

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

А вот как эти кадры чередовать — я это назову блиттингом
Опять мимо. Сами же ссылку бросили — прочитайте ее уже)))
+1
Никто не платит за долгие загрузки. Это я как со стажем на AppStore говорю. Юзеру лучше один раз загрузить большой файл чем каждый раз ждать пока он загрузится или сконвертируется. Надо оптимизировать всё максимально плотно. Тем более не стоит забывать, что Gargbage Collector во флеше еще не идеален.
Вот именно. Растеризовать программно на два порядка быстрее, чем тянуть раст из интернета.
0
Растеризация нормального объема анимации на мобильном устройстве происходит совсем не быстро. Причем даже не по вине вектора. Поэтому загрузить один раз приложение с растром и больше никогда не ждать — резонно.
+1
Я про флешку. Растеризация будет быстрее даже при самом быстром интернете.
0
Это да.
К слову растр — не самая бесполезная защита исходной графики.
0
Никто не платит за долгие загрузки. Это я как со стажем на AppStore говорю. Юзеру лучше один раз загрузить большой файл чем каждый раз ждать пока он загрузится или сконвертируется. Надо оптимизировать всё максимально плотно. Тем более не стоит забывать, что Gargbage Collector во флеше еще не идеален.

в случае с Kindom Rush, то такая загрузка ведь не будет долгой
0
А мы только о WEB версии говорим?
0
в случае с Kindom Rush, то такая загрузка ведь не будет долгой

это скорее вопрос тебе о версии для iPad. Как думаешь?
+1
Вектор на мобильных устройствах выглядит хреново + он долго растрируется. Одно дело у тебя 2-3 кнопки растрировать надо. Другое дело объект с 1000 точками, каждая из который меняется в следующем кадре.

Представь себе юнита, который бежит. Тебе надо каждый кадр зарастрировать. Чтоб вектор красивым был — тебе надо ставить сначала качество графики максимальное. Ты сразу получает тупизм. Моментально получаешь! На старых девайсах типа 3Gs и iPad1 у тебя произойдет либо креш либо фпс упадет до пизд*ца… Короче говоря ты получишь одну звезду за приложение и его больше никто не скачает.

На iOS тот же кингдум раш — сделан тоже через SpriteSheet.

На счет умных людей кто шарит в терминах — мне пофигу как точно называется то, что я делаю. Главное мне за это хорошо платят и все довольны )
+1
Спасибо.

Главное мне за это хорошо платят и все довольны )
+1
+4
Мне бы твое спокойствие, написал "+1" и пошел по своим делам :D.
+2
Новая аватарка для Komizart'а ;D
0
смешно, жаль минусовать нельзя)
+4
Чувствую своей сатирой наживу себе хейтера-минусовщика ;D

Считаю, картинка вполне отражает твою манеру ведения полемик.
Okay guy – персонаж, который всегда со всеми соглашается, и не имеет воли, желания или аргументов оппонировать, поэтому всегда соскакивает со своей позиции, точки зрения.

Ретроспектива: Сначала ты ратуешь за программную растеризацию, и велеречивое «тю» показывает твердость убеждений и риторичность вопроса. И тут же после достаточно однобокого утверждения безмолвно соскакиваешь со своей точки зрения, поплюсовывая оппонента. А следом соскакиваешь и с новой точки зрения, поддерживая диаметрально противоположное мнение Платона.
«Okay guy», «+1» — вроде все сходится ;D
0
ну начнём с того, что яблоковой аппаратуры у меня нет и с ней я не работал, так что с нагрузкой на том же айПаде и со скоростью растеризации цифр у меня нет. Поэтому спорить тут и не могу.

В вэбе да, активно использую растеризацию и считаю метод KR как минимум странным.

ЗЫ: про хайтера это ты погорячился :)
+1
Вообще-то, текстурные атласы собирают, для того, чтобы сэкономить память под текстуры и увеличить скорость их загрузки за счет меньшего количества обращений к диску. Хранить в векторе текстуры для iOS приложений так же тупо, как хранить в растре векторные картинки для флеша. Конечно, имеется ввиду векторный рендеринг.
+1
Обращение к диску на iOS не такое критическое, как нагрузка железа лишними операциями. Стоит напихать игру вектором — iOS сразу выдаст второй уровень предупреждения. Третий уровень — это уже краш в большинстве случаев. Тем более с появлением доступа к графическому чипу через Flash — обработка растра происходит в разы шустрее и использовать вектор смысла вообще нет никакого.

Вот именно. Растеризовать программно на два порядка быстрее, чем тянуть раст из интернета.

Игры для мобильных устройств тянут без проблем с AppStore любых размеров. Этого никого не парит. А вот долгая подготовка ресурсов в самой игре — причина плохит отзывов даже у интересных игрушек.
+1
Никто не рассматривает возможность работы kingdom rush запакованной через air. Kingdom rush — нативное приложение, ку?
0
Дело не столько в конкретно этой игрушке, сколько вообще в оптимизации вопроса. Учиться надо писать приложения правильно сразу, а не искать пути усложнения. А то, что KR нативное — в этом никто не сомневался.

Можно сделать все кадры в виде набора файлов, а можно сделать все кадры в рамках одного листа. Это тоже оптимизация.

Я не пойму вообще о чем ты говоришь и главное — что хочешь сказать не ясно.
+2
Учиться надо писать приложения правильно сразу, а не искать пути усложнения.
Правильно. В случае с Kingdom Rush разработчики нарисовали векторный арт, экпортировали его растр, а потом обратно импортнули во флэш, вместо того, чтобы просто закэшировать арт программно одной строчкой кода.
В итоге:
1) сделали лишнюю работу
2) swf файл весит значительно больше чем должен, соответственно долгая загрузка и повышенный bounce-rate.
Если бы kingdom rush был виральным, то добавились бы еще проблемы с дистрибьюцией тяжеловесной swf'ки.
+1
Ну да ) нам легко судить тех, кто прилично заработал якобы наши деньги :)

В эру быстрого интернет доступа большинство людей уже не обращает внимание на размер… 10 мб, 8 или 50
0
плюсану ка я ещё раз и «пойду по своим делам» :)
+5
Ну да ) нам легко судить тех, кто прилично заработал якобы наши деньги :)
Э? Странные у тебя мысли. Не думаю, что кто-то считает деньги айронхайда своими.

В эру быстрого интернет доступа большинство людей уже не обращает внимание на размер… 10 мб, 8 или 50
Еще раз, долгая загрузка, повышенный bounce-rate, проблемы с дистрибьюцией, лишняя работа.

Я так понял, что ты просто не знал о возможности программной растеризации вектора в растр ( прям как айронхайды :) ) и попытался всем рассказать, как это круто. В итоге столкнулся с непониманием. Собственно смысл топика в том, что технологически кривое решение не мешает игре быть популярной.
0
Я так понял, что ты просто не знал о возможности программной растеризации вектора в растр ( прям как айронхайды :) ) и попытался всем рассказать, как это круто. В итоге столкнулся с непониманием. Собственно смысл топика в том, что технологически кривое решение не мешает игре быть популярной. 

О программной растеризации я знал и использую её для анимаций (шапки, баннеры и т.д.) чтоб создавать Bitmap эффекты.

Я тебе говорю о производительности просто и ничего лишнего. Меня WEB приложение не интересует. Я просто сравнивал своими руками бегущих юнитов в векторе на Air в реальном девайсе и видел как программный растр очень сильно съедает % ресурса. Такие игры никто не будет запускать в оборот. Вот и все дела )

А то что для веба — пофигу.
+2
Человек расковырял флешку и говорит, что Ironhide выбрали странное технологическое решение, вместо программной растеризации, сделали растеризацию ручную.

А ты на это заявляешь:
Вообще, не читал много… но половина тутошних даже не поняло зачем так делается :)
Т.е. получается, что «тутошние» такие идиоты, что не знают, что растр рисуется быстрее вектора. Вот, собственно, точка непонимания.
Ох, зафлеймился. Пойду лучше пиво пить.
0
Вообще-то, текстурные атласы собирают, для того, чтобы сэкономить память под текстуры и увеличить скорость их загрузки за счет меньшего количества обращений к диску.
Есть еще одна важная причина их использования. Переключение стейтов, в opengl(es) и directx, «затратные операции»(в случае их многократного использования), и переключение текстур, не исключение. Поэтому, при использовании атласов, нужно сделать меньше переключений между текстурами, что и увеличивает fps.

Для флеша, использование атласов(если это не molehill), производительность не повышает. Т.к. рендер софтварный.
0
Тоже хотел добавить, но не писал ничего серьезного на gl'е и не знаю цену аналога dx'овского SetRenderState. Под DirectX, да сортируют по текстурам и экономят на переключениях.
0
в дебри дремучие тема зашла)
+1
Дебри дремучие путь показывают. Силу программная растеризация забирает. Ручной растеризацией падован заниматься должен…
0
Играл KR на андроидном планшете. Через раз перегружать приходилось заново эти 21 мб. Ругался.
0
Учитывая объём графики — может быть весьма долгой.
0
Можно грузить перез загрузкой левела, по необходимости, а не все сразу. Тогда норм.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.