Pull to refresh

Comments 31

Как я понимаю вы не хотели использовать OGL ES 2.0 из-за отсутствия оного на старых моделях. Уверены ли вы, что это того стоит? Мне просто интересны статистические данные: сколько запуском с каких версий iOS, моделей телефонов.

Как я понимаю таргетиться на 1G и 2G iPhone нет смысла, лучше добавить плюшек который доступны только в 3/4/5G. Я просто заметил среди людей откружающих меня, что те у кого старая модель (до 4G) мало покупают приложений, а те кто покупают плюются из-за производительности некоторых.

У меня есть множество приложений которые на первых айфонах запускаются, но совершенно не юзабельны, в то же время я знаю, что некоторый фичи пришлось реализовать через костыли так как они появились только 4.x SDK. Разработчик затратил больше времени на реализацию фич под старые модели телефнов больше времени чем я потратил играя в его игру, так как она нереально тормозила на старых моделях.
Если никаких других “фич” из 2.0 в приложении не используется, применение таких веревок считаю хорошим решением, отчего не сохранить совместимость с бόльшим количеством устройств.
А вот если Вы решили разрабатывать 3D шутер, то тогда конечно без 2.0 наверно не обойтись, какие цели, такие и решения.
Не используется потому, что вы даже не думали о них. Одним OGL | ES 2.0 новые модели не ограничиваются. Кстати вы сравнивали энергопотребление при использовании этого метода и «родного»?
А как насчет производительности? Самое простое решение — не всегда самое оптимальное, вполне может быть что создатели Cut the Rope потратили кучу времени как раз на оптимальный алгоритм этой самой веревки.
Я не утверждаю, что моё решение лучше, или самое оптимальное, но такие веревки не тормозят.
UFO just landed and posted this here
В интервью же говорится, что нет. Они использовали свой движок.
«Rope physics are not as easy to get right as it might look. We've decided to go with our own engine instead of using an existing technology such as Box2D, partly because we wanted the rope looking as smooth as possible, and party because it looked like an interesting task.»
Напрашивается аналогия:
— Написать операционную систему трудно и мы потратили много времени.
— А я взял за основу Linux, немного подредактировал то, что было нужно мне и не могу понять, с чем у них были проблемы.

ИМХО.
Написать свой физический движок очень сложно. Но по их интервью складывается впечатление, что веревки вообще сложно реализовать, по фразе:
«Rope physics are not as easy to get right as it might look."

тоже ИМХО.
А разрезать в динамике пробовали? Там действительно не так все однозначно, как кажется на первый взгляд.
Разрезать не проблема: была одна веревка, мы ее порвали по соединению.
А анимация? Одно дело просто рарзывать джоин, и совсем другое эмулировать разрывание в следствии применения определенной силы.
Никакой анимации там нет (специально даже запустил пересмотрел).

Для того, чтобы резать веревку применять силу в том понятии, в каком она используется в физических движках вообще-то не нужно, да и это не было было бы проблемой, все необходимые данные предоставит физический движок.
UFO just landed and posted this here
Если ставилась задача «Как в Cut the rope», то этого и не надо, там веревка не взаимодействует с другими предметами
UFO just landed and posted this here
Верёвки и прочую soft-body (если постараться то и rigid-body) физику можно писать используя интегрирование Верле.
Вся теория завязана на том, что скорость — разница между текущим и предыдущим её положением.
Применительно к задаче реализация сводится к следующему (псевдокод):
Есть набор точек (joints) связанных пружинками (links).
Задача каждой точки — двигаться согласно скорости.

joint.update
tempPos = pos // запоминаем текущую позицию во временную переменную
pos += pos - lastPos // прибавляем скорость
pos += gravity // и вектор гравитации
lastPos = tempPos


Задача каждой пружинки — поддерживать нужное расстояние между её joint'ами.

link.update
delta = joint[1].pos - joint[0].pos // вектор в сторону второй точки
length = sqrt(delta.x^2 + delta.y^2) // текущее расстояние между точками
delta /= length // нормализация вектора
delta *= length - LINK_LENGTH // LINK_LENGTH - расстояние которое следует поддерживать
delta *= FORCE // FORCE - коэффициент упругости пружинки (0..1)
// расталкиваем точки в противоположных направлениях
joint[0].pos += delta * 0.5
joint[1].pos -= delta * 0.5


Сама организация цикла обновления сводится к обновлению всех joint'ов, и нескольким иттерациям обновления всех link'ов (для стабилизации).
Таким незамысловатым способом можно создавать верёвки, рэгдоллы (ограничить углы между link'ами), волосы и даже некий аналог твёрдотельной физики. Реализация простая и никаких физических движков не требует.
Пример работы такой физики.
При всём уважении в примере, не веревки, а цепи, собраны из участков по 2 звена, да еще и с утончением на месте стыка.
Вопрос Art'a, повышение детализации и смена текстуры на алгоритме никак не отразится.
Вы правы, на физике процесса это не отразится. Но физике в хабратопике уделено 1/3, а графике 2/3. Собрать же “цепь в физическом мире” зная физический движок, это вообще не задача.

Использование интегрирования Верле, это уже шаг к собственному физическому движку.
Если применять в приложениях одновременно Box2D или Chipmunk и Ваш алгоритм, то теряется очень много универсальности. Хорошо, когда все объекты живут в одном мире.

Тогда лучше правда написать свой физический движок, все объекты “поместить” в него.
Всегда хотел узнать, как это делается.
Спасибо за статью!
В новой версии Box2D уже создали специальный джоинт для создания веревок.
http://box2d.org/documentation/
Действительно в 2.2 добавилось, и они устранили эффект растягивания веревки, при больших нагрузках (что раньше надо было учитывать, и не перегружать цепочку).
Спасибо за информацию.
зачем использовать физический движок ради пары достаточно тупых уравнений?
Это вопрос из разряда: “Зачем использовать вектор, если можно написать свой список, а если иметь готовый свой список…”.

Представьте себе, что вам нужны не только веревки, у вас вообще много объектов в физическом мире “живет”, зачем для верёвок выпендриваться и применять “тупые уравнения”?
ну тут вверху обсуждали «А может быть кат зэ роуп делали оптимизированную версию».
Я так и представляю, как создатели cut the rope вместо того, чтобы делать рабочее приложение, таки сидят и скручивают разные движки, потому что у них очень сложная физика в приложении, безумно сложная 3д-графика и ещё много всего.
Кто-то занимается программированием/решением различных задач ради интереса и любопытства, так как нам это нравится.

Не все это могут понять.
Привет из года 2016.
Ссылка на метод устранения пикселизации верёвки устарела (статья удалена или заблокирована). А интересует именно он. Что за метод?
Sign up to leave a comment.

Articles