Pull to refresh

Верёвка как в “Cut the Rope”

Reading time2 min
Views18K
Почитав интервью создателей знаменитого бестселлера “Cut the Rope”, в котором утверждается, что на создание веревки ими было потрачено больше всего времени, я не поверил, что написать «алгоритм движения тяжелой нити» действительно так сложно, и для этого надо чуть ли не самим писать физический движок. Погуглив, готового ответа я не нашел, и решил попробовать сделать самостоятельно нечто подобное на cocos2D + Box2D.
За основу были взяты правила:
  1. Цепь делать лучше с помощью прямоугольных тел, соединенных Revolute Joint’ами;
  2. Чем тяжелее объекты составляющие цепь – тем она стабильнее;
  3. Количество итераций при шаге – чем больше, тем лучше (мне хватило 3-х);
  4. Очень помогает, если каждый кусочек цепи, помимо Revolute Joint’а соединить Distance Joint’ом.


В результате у меня получилась цепь объектов в физическом мире, результат можно посмотреть на следующем рисунке и видео:
image


Таким образом, изготовить тяжелую нить в Box2D оказалось не сложно.
Осталось описать графическую часть. В этом, конечно же, должны были помочь кривые Безье 2 порядка, алгоритм которых уже реализован в DrawingPrimitives в cocos2D.
Для поиска точек отрисовки кривых можно использовать места соединения Revolute Joint’ов, что я и сделал. Однако результат проделанной работы меня сильно огорчил, я получил жуткую пикселирезацию, что хорошо видно в следующих графических материалах:
image


Использовать антиалиасинг в cocos2D без поддержки OpenGL ES 2.0, к сожалению нельзя (использовать оный, с поддержкой, не хотелось, по объективным причинам), поэтому для устранения неприятного эффекта был использован метод.
Полученный результат меня полностью удовлетворил, более того после долгого изучения разницы между моими веревками и в “Cut the Rope”, я такой не заметил. Вот что получилось в итоге:
image


Таким образом, на разработку «алгоритма движения тяжелой нити» у меня ушло не более 14 часов.
Код отрисовки антиалиасинг линии прилагается.
ccDrawingPrimitives.zip

Использовал тут и тут.
Tags:
Hubs:
+31
Comments31

Articles