![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать в игре притяжение к земле в Delphi? [Delphi, Windows]
Samarik © (2007-01-05 14:53:00)Хочу сделать игру на подобии Super Mario, не знаю как сделать притяжение объектов к земле, всмысле, после прыжка объект(игрок) падал вниз с ускорением g=9,8! Помогите! Зарание благодарю!
ors_archangel (2007-01-10 19:30:00) [1]
> Ricks ©
Да, физика - вестч великая :)
Ricks (2007-01-10 17:04:00) [2]
> ускорение свободного падения не зависит от массы...
Сам налепил что-зря :)
Зависит от массы тел, которые притяниваются. Но для Марио, думаю, это не столь существенно :)
И еще по делу:
для прыжка нужно присвоить какую-то начальную скорость телу (vY=...) и тогда твой Марио 100% будет прыгать нормально, но остается проблемма с определением уровня земли итд итп, но это уже твои проблеммы :)
Ricks (2007-01-10 16:56:00) [3]
> ors_archangel ©
Давно наверное с физикой сталкивался... ускорение свободного падения не зависит от массы...
F = m·a, для силы притяжения F = m·g, значит
m·a=m·g => a = g.
Теперь по делу :)
введи Y-координату и Y-скорость объекта, а дальше так:
a = F/m = -m·g/m = -g (проверь свое направление, т.е знак + или -)
vY = vY + a · dT
Y = Y + vy · dT
dT положи 0.1 — 0.01, смотря какую тебе нужно скорость игры
grisme (2007-01-07 10:32:00) [4]Servelat © (06.01.07 15:00) [5]
автору одно - ни того и не другого пока не ясно :] а это в реализации почти одно и то же, так что нет сложности "равномерно"-"неравномерно", тут у него пока проблемы с широтой мышления(Samarik, не в обиду сказано) в программинге и применении математики в нем, нужно пока не играми заниматься, а хорошенько базис свой в мосХЪе укрепить, а потом решения сами будут приходить в голову. :P
Servelat (2007-01-06 15:00:00) [5]> В марио нету "силы притяжения", там он равномерно падает
> и подлетает
Неправда ваша, специально нашел ROM марио от денди и проверил. Не равномерно (=.
Bogdan1024 (2007-01-06 00:46:00) [6]В марио нету "силы притяжения", там он равномерно падает и подлетает, что намного проще реализовать чем притяжение.
ors_archangel (2007-01-05 18:07:00) [7][1] значит, что объект имеет ускорение a = m*g, направленное к центру Земли (читай: вниз), если тело имеет ускорение a = m*g, это значит, что его скорость изменяется на m*g*t за t секунд, например, если взять тело, весящее 11 кг, и положить g = 9.81 м/с2, то скорость тела v за t = 0.5 сек изменится на 11 * 9.81 * 0.5 = 53,955 (©Калькулятор), так как компьютер - дискретная машина, и мы не можем бесконечное число раз в секунду изменять скорость на бескоенчно малую величину m*g*t (t-->0), как это происходит в природе, то мы можем изменять скорость v тела на его ускорение конечное число раз в секунду, например, каждый кадр прорисовки, тогда его писать нужно в цикл прорисовки, либо по таймеру, 10-30 раз в секунду - вполне достаточно, тогда пишем этот код в тело обработчика таймера. Если используется таймер, имеющий интервал t, исчисляемый в миллисекундах, то:
a := m * g * t / 1000;
v := v + a;
Если же изменять скорость, например перед прорисовкой каждого кадра fps раз в секунду, то:
a := m * g / fps;
v := v + a;
fps можно подсчитать так: перед началом прорисовки кадра (и всей другой необходимой работы, как, например, просчёт физики) запоминаем текущее время в некоторой переменной time, а после вычитаем из текущего времени сохранённое, виличина, обратная данной разности и есть количество кадров в секунду - frames per second - fps:
var
time: cardinal;
begin
time := GetTickCount;
…рендеринг, физика, a.i. и т.п.…
time := GetTickCount-time;
fps := 1000 / time;
end;
- в примере fps умножается на 1000, потому что GetTickCount возвращает число миллисекунд, прошедшее от старта ОС.
Saymon (2007-01-05 16:08:00) [8]
> a=m*g
Аццкий_рыцарь, а куда его вписать?
Аццкий_рыцарь (2007-01-05 15:59:00) [9]a=m*g :))