Прежде всего, обратите внимание, что я хочу понять принцип, поэтому я бы предпочел объяснения на простом английском языке (но, конечно, я ничего не имею против некоторого кода, дополняющего эти объяснения).
Мне интересно, как правильно сделать шаг персонажа на склоне, давайте начнем с двух скриншотов игры Limbo, чтобы показать вам, что я имею в виду:
Итак, как вы можете видеть на этих рисунках, это похоже на позвоночник персонаж на самом деле перпендикулярен горизонту, а не поверхности земли, и это наблюдение приводит меня к моему вопросу:
как вы можете воспроизвести такое поведение с помощью Sprite Kit? Потому что, если я присоединяю физическое тело к узлу, у меня есть возможность позволить ему вращаться, поэтому я получу что-то вроде этого:
Если я отключу ротацию, я получу что-то более похожее на это:
как вы можете видеть, эти способы решения обеих важных проблем не выглядят естественными. Итак, как мне сделать, чтобы это выглядело естественно? Я думал создать несколько спрайтов и несколько физических тел, а затем соединить их все вместе с соединениями. Я не думаю, что это будет выглядеть естественно, потому что если вы посмотрите на это:
хотя я могу физически связать эти узлы, как я буду делать их выглядеть реально графически? Потому что в реальности, например, бедро и икра связаны коленом ...
Любые идеи ?
Ответы:
Чтобы расширить ответ Джоша Петри, найти угол наклона стопы также довольно просто.
Угол наклона ножки равен углу наклона поверхности. Поскольку у нас удобно две точки на этом склоне, мы можем найти угол наклона (также можно использовать два угла треугольной формы склона, но постепенные уклоны могут быть слишком сложными; для холмистой местности это лучшее решение). В конечном итоге наклон будет H / P (при условии, что пятка согнутой ноги находится непосредственно под соответствующим бедром), или arctan (H / P) rad. Используя косинусы, легко найти, что H = (F + T) - (Fcosθ + Tcosφ).
Угол ступни становится арктаном ((F (1-cosθ) + T (1-cosφ)) / P)
PS: Если вы хотите ДЕЙСТВИТЕЛЬНО войти, вы также можете найти добавленную ширину для P.
PSS: нога будет сгибаться только далеко, поэтому имейте это в виду, прежде чем пытаться подняться на 80-градусный склон.
PSSS: Люди не карабкаются по холмам, а отдыхают на них. Сохранение стопы идеально ровной на холме может несколько точно изобразить игрока, стоящего на подушечках пальцев ног, и позволение пятке опускаться на землю, в то время как на холостом ходу можно сделать очень реалистичное движение.
источник
Существуют простые решения и приемы, которые вы можете использовать (например, если все ваши уклоны будут иметь фиксированный угол, просто создайте дополнительные спрайты для наклонного движения и холостого хода, предоставьте механизм для кода своей игры, чтобы узнать, находитесь ли вы на наклонной поверхности, и рендеринг соответственно - это обычно то, что делали старые игры на основе спрайтов).
Общее решением, расширяясь на многостраничной сочлененных спрайтах идеи, является использование обратной кинематики для решения для размещения символов через ногу ( см также ).
Это включает в себя определение логической структуры скелета для ваших персонажей, визуально представленной несколькими различными спрайтами (для туловища столько частей ноги, сколько вам нужно, и ноги). Конечный эффектор в этой системе - это положение ноги персонажа на склоне, которое может быть вычислено из (фиксированного) положения туловища и некоторого представления о том, какая нога находится впереди, на основе текущего кадра цикла ходьбы. Между этими двумя известными позициями система IK может определять параметры для суставов ног и создавать разумное приближение того, как любой реальный двуногий может стабилизироваться на наклонной поверхности.
IK часто выражается как трехмерная проблема, но его можно относительно легко уменьшить до двумерного пространства. В 2D вам не нужно возиться с почти таким же количеством ограничений вращения, чтобы создать реалистичное движение, как в 3D, что приятно.
Этот метод используется во многих современных 2D играх, особенно с учетом тенденции создания спрайтовых композиций для персонажей на основе скелета, а не более старой техники ручного создания каждого кадра.
источник