Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.16;
Скачать: CL | DM;

Вниз

Как сделать в игре притяжение к земле в Delphi?   Найти похожие ветки 

 
Samarik   (2007-01-05 14:53) [0]

Хочу сделать игру на подобии Super Mario, не знаю как сделать притяжение объектов к земле, всмысле, после прыжка объект(игрок) падал вниз с ускорением g=9,8! Помогите! Зарание благодарю!


 
Аццкий_рыцарь   (2007-01-05 15:59) [1]

a=m*g :))


 
Saymon   (2007-01-05 16:08) [2]


> a=m*g

Аццкий_рыцарь, а куда его вписать?


 
ors_archangel ©   (2007-01-05 18:07) [3]

[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 возвращает число миллисекунд, прошедшее от старта ОС.


 
Bogdan1024 ©   (2007-01-06 00:46) [4]

В марио нету "силы притяжения", там он равномерно падает и подлетает, что намного проще реализовать чем притяжение.


 
Servelat ©   (2007-01-06 15:00) [5]

> В марио нету "силы притяжения", там он равномерно падает
> и подлетает

Неправда ваша, специально нашел ROM марио от денди и проверил. Не равномерно (=.


 
grisme ©   (2007-01-07 10:32) [6]

Servelat ©   (06.01.07 15:00) [5]
автору одно - ни того и не другого пока не ясно :] а это в реализации почти одно и то же, так что нет сложности "равномерно"-"неравномерно", тут у него пока проблемы с широтой мышления(Samarik, не в обиду сказано) в программинге и применении математики в нем, нужно пока не играми заниматься, а хорошенько базис свой в мосХЪе укрепить, а потом решения сами будут приходить в голову. :P


 
Ricks ©   (2007-01-10 16:56) [7]


> 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, смотря какую тебе нужно скорость игры


 
Ricks ©   (2007-01-10 17:04) [8]


> ускорение свободного падения не зависит от массы...

Сам налепил что-зря :)
Зависит от массы тел, которые притяниваются. Но для Марио, думаю, это не столь существенно :)

И еще по делу:
для прыжка нужно присвоить какую-то начальную скорость телу (vY=...) и тогда твой Марио 100% будет прыгать нормально, но остается проблемма с определением уровня земли итд итп, но это уже твои проблеммы :)


 
ors_archangel ©   (2007-01-10 19:30) [9]


> Ricks ©

Да, физика - вестч великая  :)



Страницы: 1 вся ветка

Текущий архив: 2008.03.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
2-1203017485
F@T@L_Err0r
2008-02-14 22:31
2008.03.16
Ping


2-1203337459
Dan
2008-02-18 15:24
2008.03.16
VirtualStringTree


2-1203100055
operator
2008-02-15 21:27
2008.03.16
Как поменять местами node-ы в treeview?


6-1182318912
vbazik
2007-06-20 09:55
2008.03.16
скачивание файлов по ссылке


15-1202241472
Human
2008-02-05 22:57
2008.03.16
IRC