Графические эффекты, такие как эластичные щупальца в Contre Jour

Мне интересно, насколько красива игра "Contre jour" для IOS. Особенно мне нравятся эластичные "щупальца", показанные в этом видео на 2 мин 20 секунд: http://www.youtube.com/watch?v=ptdTdJarWLw

Как я могу реализовать такие эффекты?

Я знаю, что есть техника под названием " Интеграция Verlet "и даже реализация" веревки verlet "для рисования веревок в cocos2d, но как сделать такие приятные эластичные эффекты для" щупальца " спрайта?

Я опыт использования box2D и может попытаться реализовать физику для этого эффекта, но не может найти решение, как рисовать спрайт с таким эластичным морфингом.

может кто-нибудь помочь мне или дать несколько советов?

просто даже объяснение техники, которая может мне помочь?

У меня есть немного опыта в opengl, отличный опыт cocos2d, поэтому я планирую использовать cocos2d.

извините за плохой английский, я надеюсь, вы поймете мою проблему:)

1 ответов


Если вы используете Box2D, вы можете попробовать соединение расстояния с параметрами frequencyHz и dampingRatio, установленными в значения по умолчанию. Возможно, низкая частота около 4-6, и демпфирование около 0,5-0,7 может быть хорошей точкой для начала. Вы можете думать о частоте как о том, сколько раз в секунду сустав пытается исправить расстояние, и демпфирование, как хорошо расстояние корректируется каждый раз. Установка демпфирования на значение ниже 1 означает, что соединение будет медленнее корректировать расстояние, и оно будет иметь пружинистое/rubbery поведение.

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

окончательный рендеринг текстуры / спрайта затем займет свою позицию от текущего местоположения точек Верле.