unv

Кокосовый бег

Dec 04, 2008 01:51

Фирма Johnson Controls в рамках пиар-компании сделала себе сайт с флешовыми игрушками (собственно, на данный момент доступна только одна - Coconut Run, но планируется явно не меньше трёх).

Собственно, первая (и пока единственная) игрушка, Coconut Run (спасибо lerm_ru за ссылку) является разновидностью двумерного физического симулятора наподобие Sodaplay.

Однако в отличие от Soda, где для того, чтобы создать что-нибудь более-менее работающее, нужно было очень хорошо поработать (да и рисовать от руки в редакторе было практически бесперспективно - гораздо лучше было работать напрямую с XML-форматом модели), здесь всё расчитано именно на максимально быстрый старт.

Примитивов несколько - круг (имеет центр, за который можно цепляться), линейный блок, прямоугольный блок, пружинное ребро и колесо.
Последним можно управлять с клавиатуры - если жмёшь вправо, то все колёса модели крутятся по часовой стрелке, если влево - против часовой (в Soda для того, чтобы создать вращающееся колесо, нужно было сначала сделать колесо из точек и рёбер, потом двигатель - и затем передачу между ними; а тут, значит, это простейший примитив).

Но прелесть игры, естественно, не в наборе примитивов и удобстве их соединения (последнее, кстати, на высоте - несмотря на рекламный характер игрушки, физическое ядро сделано на совесть, а простенький редактор без возможности сохранения моделей между заходами на сайт, увеличения и прямого ввода координат, на удивление удобен и безглючен).
Прелесть игры - в чётко поставленной задаче и подсчёте очков.

Задача - провести по сильно пересечённой местности, изобилующей холмами, оврагами, трамплинами и колдобинами 15 кокосовых орехов до финиша и сделать это растеряв как можно меньше орехов и потратив как можно меньше времени.
Исходя из числа орехов и времени достижения финиша вам начисляются очки в виде процентов. Идеал, 100% - довести 15 кокосов за 15 секунд.

Сложность трассы и чёткость задания даёт реальный стимул к совершенствованию моделей транспортных средств - за это мне игрушка и полюбилась. Далее - мои экзерсисы.



Для примера показывается затравочный ролик с описанием того, что нужно сделать, а также даётся стандартная тележка. На её примере просто понять, что требуется.
Естественно, как модель по-умолчанию, она не сильно быстрая и весьма неуклюжая (по ссылке откроется вариант с высоким разрешением).

Coconut Run 0: Default:

image Click to view



Проба пера - добавляем к стандартной модели несколько колёс и связываем их на гибком подвесе. Получается "гусеница". Кокосы внутрь грузить смысла нет - получаемая за счёт множества колёс скорость убивает минимальную стабильность исходной тележки.

Coconut Run 1: Caterpillar:

image Click to view



Если вообще не заботиться перевозкой кокосов, то можно нарисовать, к примеру, вот такое:

Coconut Run 2: Pentagon:

image Click to view



А вот, собственно, первая попытка достичь финиша с кузовом, набитым кокосами, и за подобающее время. Попытка неплохая - 24 секунды, 92%.

Coconut Run 3: Speeder:

image Click to view



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

Отсюда один шаг до решения главной головной боли - вываливающихся кокосов. Просто нужно сделать люк с автоматически закрывающейся крышкой, состоящей из колеса с прицепленным к нему линейным блоком.
Одна тонкость: с противоположной стороны нужно поставить кружок, т.к. физический движок работает не непрерывно, а с квантованием по времени и пересечения высчитывает соответственно - потому при определённой скорости крышка просто пролетает через тонкостенный корпус.
Для ускорения добавляем между основными колёсами ту самую "гусеницу" на гибком подвесе - за счёт него она хорошо ловит поверхность и действительно помогает.

Сказать честно, я был уверен, что несмотря на свою навороченность, тележка окажется медленнее предыдущей. Но лучший результат - 22 секунды и 94% - опроверг мои опасения.

Coconut Run 4: Tank:

image Click to view



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

В данном случае идея закупоривания кокосов идёт ещё дальше - две полуокружности, вложенные друг в друга и способные поворачиваться относительно друг друга, надёжно закупоривают вход при любой тряске.
Для вращения внутренней полуокружности служит небольшое колёсико, а для стопора его в нижнем положении - специальный зубец.

Coconut Run 5: Omni:

image Click to view



Вот она - моя красавица, впервые достигшая заветного предела в 15 секунд не потеряв ни одного ореха! Это 100%.
К сожалению, из-за видеозаписывающей утилитки, тормозящей общую производительность системы, показать рекордное время на видео не получится, но она действительно может это сделать.
И повторюсь - она очень изящная и красивая :-)

Coconut Run 6: Light:

image Click to view



Ну, собственно, главная задача (100%) достигнута - дальше начинается самое интересное - эзотерические модели (счёт был открыт чуть раньше - моделью Omni)

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

Coconut Run 7: Walking Wheel:

image Click to view



Основной принцип взят у предыдущей модели - колесо упрятано внутрь конструкции, в самую сердцевину, оболочка сделана круглой и полой - в неё заваливаются кокосы и удерживаются центробежной силой.
Идея потребовала доводки - мощности колеса не хватало для создания достаточной центробежной силы и его пришлось удвоить (создать ещё одно колесо с тем же центром, но чуть меньшим радиусом - и также привязать к нему раму. Плюс для защиты от высыпания кокосов были сделаны зубцы со стороны входа.
Как оказалось, главная сложность - засыпать кокосы внутрь :)

Coconut Run 8: Centrifuge:

image Click to view



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

Это - самая сложная для пилотирования модель, т.к. несмотря на баланс у неё нет статического равновесия, а лишь динамическое, поддерживаемое непрерывным нажатием кнопочек влево-вправо.
Она ни разу не доехала до финиша, не растеряв кокосов. Собственно, и до финиша она доехала всего лишь несколько раз. В записанном на видео примере можно заметить, что от краха на последнем трамплине её спасло лишь везение. Так же бесславно она погибает в яме под первым трамплином и в яме после колдобин (вовремя подвернувшийся выпавший кокос очень выручил).

Тем не менее, модель знаковая и неполный набор довезённых кокосов этот факт не меняет :)

Coconut Run 9: Monocycle:

image Click to view



До сих пор я активно не использовал кружков - а ведь у них тоже есть центр, за который можно цеплять пружинные рёбра и вокруг которого кружок охотно вращается.
Разве что у него нет внутреннего источника движения, как у колеса. Но движение на него можно легко передать, соединив рёбрами по ободу с колесом. Впрочем, это неинтересный вариант.
Гораздо интереснее воспользоваться фрикционной передачей, что и демонстрирует следующая модель - связка маленьких колёс под давлением (обратите внимание на маятник сверху) облегает круглое статическое колесо.

Доводка этой модели потребовала значительного времени - долгая борьба с недостаточной мощностью фрикционной передачи (модель банально не могла выехать из ямы, если упала в неё) увенчалось успехом - каждое из маленьких колёсиков на самом деле троировано, противовес усилен, подвес оптимизирован. Ещё одной головной болью было переворачивание (видели бы вы сколько амортизирующих колёс было спереди и сзади в промежуточных вариантах). Вылечилось правильным позиционированием переднего кружка.
Рекомендую посмотреть в высоком разрешении (по ссылке) и в полном экране - тогда лучше видна работа "двигателя".

Coconut Run 10: Loco:

image Click to view



Идея взята отсюда: http://ru.youtube.com/watch?v=avv_QuHX2o4
Камрад izatapewyrm заметил, что воронка с кокосами сверху не закрыта и кокосы можно теоретически выдернуть, не нажимая на кнопочку и не запуская таймер - и достичь нулевого времени и 100%, не развивая бешеной скорости.
Конструкция у него получилась весьма монструозная и неуклюжая - и у меня сразу возникла идея, как реализацию оптимизировать.

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

Coconut Run 11: Cheater:

image Click to view



Данную модель можно расценивать как проверку физического движка на прочность. Движок проверку с честью выдержал :)
В отличие от "гусеницы" в первой и четвёртой моделях, здесь есть настоящая гусеница, составленная из траков! И она действительно ведёт себя как гусеница ;)
Впрочем, если размер колеса недостаточно велик и вы раскрутили гусеницу слишком сильно, она легко слетает - из-за того же алгоритма квантования по времени.

Coconut Run 12: Tractor:

image Click to view



Естественно, идея шагающей модели возникла одной из первых. Но сложность не в том, чтобы нарисовать ноги, а в пересечённости местности - не дойдёт.

Впрочем, с ногами тоже возникли определённые проблемы: попытка нарисовать стопоходящую машину Чёбышева не увенчалась успехом из-за недостаточной жёсткости упругих рёбер (т.к. ноги ходят друг сквозь друга можно использовать только проницаемые рёбра с небольшим вкраплением маленьких кружочков).
Рёбра достаточно упруги на растяжение/сжатие, однако если из них нарисовать трёхсоставный рычаг (с точкой привязки посередине), то в средней точке возникают напряжения кручения, при малом угле отклонения порождающие минимальное растяжение/сжатие.
В результате конструкция сильно колышется и выполнять свойства рычага не желает. В Soda такая проблема решалась прямой правкой оптимальной длины рёбер (двум малым стыкующимся с центром рёбрам задавалась нулевая длина, а одному распорному - двойная), в результате конструкция была сильно напряжена и замечательно реагировала на малые растяжения хорошую рычажность. Оттого (а также от отсутствия готовых колёс) самые распространённые в Soda модели - ходящие.
Здесь же при явном упоре на колёса шагающую машину сделать было крайне сложно - это самая сложная тележка из реализованных здесь (самый сложный в управлении, напомню, моноцикл).

Первая версия (под кодовым названием "Слон") не преодолевала даже первый подъём - ноги заплетались, подламывались, скользили.
Не хватало мощности стандатной пары колёс, а двойные колёса неминуемо заплетали ноги узлом. Был даже монструозный вариант с тремя колёсами на пару ног - они равносторонними треугольниками торчали вверх. Но у этого варианта был слишком высокий центр тяжести и он неминуемо переворачивался.
Плохое сцепление с дорогой удалось забороть заменой плоских стоп на многократно повторённые кружки (как я правильно догадался - по каждому кружку трение считается раздельно :).
Заплетание стоп и подламывание ног заборолось многократным (пяти- и трёхкратным) повторением рёбер, стягивающих колёса друг с другом и с ногами, а также распорным ребром между стопами.
Переворачивание вылечилось добавлением вынесенной "головы", а также выверенной ориентацией ног. Тяжёлая стандартная корзина для кокосов из прямых блоков была заменена лёгкой корзиной из тонких прямоугольных блоков.

В результате получилась очень изящная конструкция, которую я назвал "Пумой" из-за её мягких кошачих лапок.

Coconut Run 13: Puma:

image Click to view



Основная идея данной конструкции - не держать в себе.

Т.е. не засыпать кокосы внутрь машины (из которой они всё равно стремятся вывалиться), а тащить прямо по земле. Но идея катапульты (даже движующейся за кокосами), к сожалению, не работает - слишком тяжёл рельеф.
Однако работает идея бульдозера - только не толкающего ковш перед собой, а тянущего. Впрочем, тут тоже не обошлось без магии (а точнее, нанотехнологий) - если приглядеться (особенно в режиме с высоким разрешением - по ссылке), то видно, что нижняя кромка ковша выполнена тонюсеньким (2 пикселя) прямоугольным блоком, благодаря которому ковш уверенно зарывается в землю и держит кокосы (в противном случае они очень выскальзывают). Ну и стандартный набор из дублированных колёс/рёбер.

Это - вторая по сложности управления машина в данном обзоре. Впрочем, мне удалось с её помощью довезти полный комплект кокосов до финиша - за 3 с половиной минуты с n-цатого раза (немало этому поспособствовало добавленное среднее ребро между кузовом и ковшом, устранившее проблему переворачивания ковша).

Coconut Run 14: Bulldozer:

image Click to view


coconut, run, моделирование, физика, видео, coconut run, игры

Previous post Next post
Up