Форум: "Игры";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];
ВнизКак сделать в игре притяжение к земле в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c