Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
15-1202114841
Tornado
2008-02-04 11:47
2008.03.16
Выбор видеокамеры


8-1177005334
Лено
2007-04-19 21:55
2008.03.16
Геометрия в делфи. !срочно!


15-1202375660
@!!ex
2008-02-07 12:14
2008.03.16
Компиляция двух вариантов


11-1166215701
Galkov
2006-12-15 23:48
2008.03.16
про Align, когда выключена видимость родителей


3-1193207531
Aladdinych
2007-10-24 10:32
2008.03.16
Table busy





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский