LINUX.ORG.RU
ФорумTalks

Прикладная физика уровня школы. Удобство.

 


1

2

Пишу тут игрушку и мне нужна примитивная эрзац-физика прыжка персонажа (просто увеличивать координаты на какое-то значение не хочу — во-первых без физического обоснования такой прыжок будет выглядеть как говно, а во-вторых по геймплею масса персонажа должна чуть-чуть влиять на траекторию прыжка).
Вводные данные: масса и координата. Надо получить: координату в любой момент времени.
И тут вопрос: как удобней для дальнейших расчётов представлять импульс? Должен ли я просто сообщать телу какое-то количество джоулей? Или сразу оперировать mv? Или сообщить телу ускорение и каждый квант времени влиять на него «гравитацией»...
Кто свободно чувствует себя в физике и может быстро охватить возможные варианты? Эй, школьники! У вас же в голове ещё свежи все подробности!

★★☆

Ответ на: комментарий от onon

Я понимаю. Вот я и спрашиваю как лучше. Может вариант с ускорением и дополнительным «коэффициентом массы» будет удовлетворителен.
Но на самом деле хотелось бы просто всё честно рассчитать — благо современны компы достаточно мощные...

Stahl ★★☆
() автор топика

по геймплею масса персонажа должна чуть-чуть влиять на траекторию прыжка

Это ж с какой скоростью он должен прыгать…

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

С нормальной общечеловеческой. Не веришь? Возьми в руки ИБП и прыгни, чел-с-постоянной-траекторией:)

Stahl ★★☆
() автор топика
Ответ на: комментарий от onon

Пофиг. Даже если он подпёрдывать будет во время прыжка — траектория с ИБП и без ИБП будут отличаться.

Stahl ★★☆
() автор топика

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

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 2)
Ответ на: комментарий от Deleted

Да срать я хотел на буквоедство. Тем более, что у меня один человек. С различным грузом.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Evgueni

Ты бы мне лучше формул накидал. Меня, например, очень смущает расчёт «силы в течении какого-то времени».
Впрочем я игру пишу, а не спортивный симулятор.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Evgueni

Пф-ф-ф. А что за время? Как ты себе представляешь время «отталкивания» (или это время что-то совсем другое означает)?

Stahl ★★☆
() автор топика

Координаты X,Y при прыжке всегда описываются параболой, тебе надо лишь параметризовать её коэффициентом зависящим от массы и силы персонажа

af5 ★★★★★
()
Ответ на: комментарий от Stahl

Ты, когда готовишься к прыжку — подгибаешь ноги. Можно оценить разницу в согнутом и разогнутом состоянии, зная силу и предположив, что за время толчка она остаётся постоянной, то легко оценить время толчка ограничевшись равноускоренным движением.

Evgueni ★★★★★
()
Ответ на: комментарий от Stahl

? Это кинематика — из сложностей только квадратный корень. В первом приближении прыжок характеризуется только силой толчка и амплитудой приседания. Масса и угол тоже входят, естественно, как и g

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от Stahl

Как ты себе представляешь время «отталкивания»

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

Я буквально пару месяцев назад в multiplayer-платформере реализовывал всё это =)

Sadler ★★★
()
Ответ на: комментарий от Sadler

время отталкивания должно зависеть от времени нажатия на кнопку прыжка

Гм. Любопытная мысль.

управление траекторией полёта в воздухе

Не-не-не. Только не это!

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

На Unity3D такие вещи очень классно кодить: буквально пара скриптов, и механика уже работает. Жаль, что редактор до сих пор не осилили под linux выпустить.

Sadler ★★★
()
Ответ на: комментарий от buddhist

Ну замечательно — теперь ради прыжков в сраном платформере прикручивать целый физический движок. Меня это не возбуждает.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

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

Sadler ★★★
()
Ответ на: комментарий от buddhist

Ну боты ещё... В общем мне настоящая физика не нужна.
Все остальные объекты если и движутся, то по каким-то своим траекториям, к физике не имеющим отношения.

Stahl ★★☆
() автор топика
Ответ на: комментарий от derlafff

Я высчитал так:
x = v*t*cos(a);
y = v*t*sin(a) - g*t*t/2;

v — начальная скорость считается как ф-ция массы и силы персонажа: v = F/m*t (тут t — время применения силы)

Вот как-то так.
А некоторые мне тут ODE предлагали тащить.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

А что у тебя за движок такой, что нужно координаты рассчитывать?

Не легче численно решать по мере надобности?

derlafff ★★★★★
()

Используй скорость и координаты. Для прыжка придавай скорость, для гравитации отнимай из скорости каждый кадр g*dt, где g — подобранная для игры гравитационная константа, а dt — время с предыдущего кадра. И каждый кадр прибавляй к координатам скорость помноженную на это самое dt.

И вообще, не стесняйся экспериментировать и придумывать принципиально новые формулы, главное чтобы в игре это чувствовалось как что-то правильное. В первом Dave, например, совершенно упоротая физика прыжка, но тем не менее игра играбельная.

PolarFox ★★★★★
()
Последнее исправление: PolarFox (всего исправлений: 2)
Ответ на: комментарий от Stahl

Что значит численно? А я что считаю?

Примерно вот так:

Заводишь у игрока вектор скорости V, и в момент прыжка присваиваешь ему Vпрыжка / m. В каждый момент времени:

  • Прибавляешь к координатам игрока 1/fps * V
  • Если он в свободном падении, делаешь V = V - 1/fps * g

Ну т.е. нам плевать на то, какие у него координаты будут когда, главное — знать текущие координаты, скорость и частоту кадров

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 4)
Ответ на: комментарий от Stahl

Он про то, что

Надо получить: координату в любой момент времени.

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

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

придумывать принципиально новые формулы

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

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

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

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

В майнкрафте, вон, незакреплённые кубы в воздухе висят,

Потому что это говно и так тормозит и жрет сотни ресурсов.

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 1)
Ответ на: комментарий от derlafff

Воксельные дела всегда жрут много ресурсов, их не очень просто рендерить.

Ну и по легенде, майнкрафт тормозит потому что жабка.

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

Ну и по легенде, майнкрафт тормозит потому что жабка.

Жабка и сотни говнокода, я копался в серверной части.

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 1)

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

next_time ★★★★★
()
Ответ на: комментарий от Stahl

А некоторые мне тут ODE предлагали тащить.

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

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)

масса персонажа должна чуть-чуть влиять на траекторию прыжка

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

А в остальном - два тела, имевшие одинаковое ускорение на старте, будут падать совершенно одинаково.

selivan ★★★
()
Ответ на: комментарий от selivan

А в остальном - два тела, имевшие одинаковое ускорение на старте, будут падать совершенно одинаково.

физика прыжка персонажа

У него персонаж будет иметь разные начальные ускорения при разных массах как раз

derlafff ★★★★★
()
Ответ на: комментарий от selivan

Ты с ума сошёл? Всё проще — человек от пола отталкивается с постоянной, присущей этому человеку, силой. И если человеку в руки дать ящик, то начальная скорость будет ниже. Ибо F = ma.
Это тебя в институте так контузили?:)

Stahl ★★☆
() автор топика

Не забывай про направление. Лучше представлять импульс как вектор с весом. Соответственно правила сложения векторов и т.д.

ziemin ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.