Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Вниз

Космические объекты...   Найти похожие ветки 

 
Zak3D[@Tm] ©   (2004-12-12 23:37) [0]

Подскажите кто-небудь, как считать движение объектов в космосе?
Мне очень понравилось, как это осуществлено у Wiz"а в его космической игре rust_25. Подскажите, какими формулами подсчитывается движение объекта в космическом просторанстве(в частности корабля)...


 
wiz ©   (2004-12-13 10:16) [1]

я это делаю через второй закон Ньютона :)

каждый объект имеет: вектор ускорения (a), вектор скорости (v), вектор положения (r).

при просчёте фрейма засекаем время, прошедшее от предыдущего - dt.

тогда:

with object do
 begin
 a.x := ...; //ускорение (гравитация, двигатели, сопротивление "воздуха" итд)
 a.y := ...;
 a.z := ...;

 v.x := v.x + a.x * dt;
 v.y := v.y + a.y * dt;
 v.z := v.z + a.z * dt;

 r.x := r.x + v.x * dt;
 r.y := r.y + v.y * dt;
 r.z := r.z + v.z * dt;
 end;


это конечно не самые лучшие формулы для "считания" интегралов, но для игрушки imho очень даже ничего.

для поворота(-ов) (вообще говоря) точно такие же формулы. Только всё "про углы" :) - угол поворота, угловая скорость и угловое ускорение.


 
NailMan ©   (2004-12-13 16:29) [2]

Я сейчас псевдоинерцию мучу. Там и масса учавствует и параметры маневровых движков и прочее. Но без всяких решений уравнений. И 2 системы координат используется. Сложновато, но зато полная свобода по осям.

---
WBR, NailMan aka 2:5020/3337.13


 
FRick ©   (2004-12-14 18:57) [3]

NailMan
А как создавать сгустки и тому подобныё вещи как у
тебя в Universal ... (дальше непомню)


 
NailMan ©   (2004-12-14 19:27) [4]

FRick ©
Системы частиц что ли?

Да вобщем-то очень просто. Есть эмиттер с вектором выброса, и есть набор "точек"-частиц. Частица генерируется с некоторым отклонением направления(задаештся величина хаоса) от вектора(текущего) направления эмиттера с с некоторыми. Они в течение времени изменяют свою координату в свободном движении(реальная частица) или всегда движется вдоль текущего направления эмиттера(относительная). При рендере каждая такая "частица" подменяется нужным спрайтом.

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

---
WBR, NailMan aka 2:5020/3337.13


 
FRick ©   (2004-12-14 20:18) [5]

Да надо предоставить!
Спасибо!
Можеш на Email!


 
Zak   (2004-12-18 17:44) [6]

Вот вроде замутил свой алгоритм движения объекта в космосе. Точнее переделал чужой написанный на С++, только вот не работает он : (. Скорее всего руки у меня кудрявые, собственно поэтому и выкладываю алгоритм. Подскажите где ошибся...
type
 hero=record
   PosX,PosY : single;     //Позиция игрока
   VelX,VelY : single;     //Ускорение
   AccX,AccY : single;     //Направление по Х и У отдельно
   Angle : integer;        //Угол поворота
   scaleAngleX,scaleAngleY : integer;

if "НАЖАТ ГАЗ"  then
 begin
    hero.scaleAngleX := cos(Hero.Angle);
    hero.scaleAngleY := sin(Hero.Angle);
    hero.accx := hero.scaleAngleX*10 ;
    hero.accy := hero.scaleAngleY*10 ;
 end;

Процедура движения героя (обрабатывается постоянно)
 Hero.velx := Hero.velx - Hero.accx;
 Hero.vely := Hero.vely - Hero.accy;
 Hero.posx := Hero.posx + Hero.velx;
 Hero.posy := Hero.posy + Hero.vely;


 
DeadMeat ©   (2004-12-19 03:09) [7]

Честно говоря (видимо к моему стыду) не видел игру wiz-а... И может поэтому не совсем догоняю чего нужно. Но всеже, если я правильно понял, то вот мой вариант.


const
 accelspeed=1; //скорость ускорения
 decelspeed=1; //скорость тормжения
 approxer=1/10000; //плавность
.....
var
 accel:single=0;
.....

if iskeydown ("w") then accel:=accel+accelspeed else if accel>0 then accel:=accel-decelspeed;
if iskeydown ("s") then accel:=accel-accelspeed else if accel<0 then accel:=accel+decelspeed;

.....
x:=x+accel/approxer;
.....


---
...Death Is Only The Begining...


 
Zak   (2004-12-19 09:10) [8]

DeadMeat
А угловые скорости? как суда прикрутить правильные повороты?


 
NailMan ©   (2004-12-19 11:36) [9]

Zak
Блин, ты провоцируешь меня на написание статьи по реализации псевдоинерционного двежения в космосе через угловые скорости.... ;-)

Надо будет сегодня заняться.

---
P.L.U.R. and WBR, NailMan aka 2:5020/3337.13


 
Zak   (2004-12-19 13:06) [10]

NailMan
: ) было бы здорово : )


 
ыароплногл   (2004-12-19 15:01) [11]

Посмотреть-бы игру wizaбб или скрины.


 
Zak   (2004-12-19 17:09) [12]

ыароплногл
http://gnar.fatal.ru/ - любуйся


 
Zak   (2004-12-21 15:46) [13]

NailMan
А когда ты напишешь эту статью? (сгораю от нетерпения : ))


 
NailMan ©   (2004-12-21 22:29) [14]

Zak
Да там будет фактически 2 статьи, вот сейчас куски исходников вкорячиваю. Долбанный dreamwaver инет что-то подвешивает постоянно :-(

Завтра и послезавтра я в отпуске, закончу обязательно максимум в четверг.

---
P.L.U.R. and WBR, NailMan aka 2:5020/3337.13


 
Zak   (2004-12-24 15:41) [15]

NailMan
Уже пятница, может хотябы первую статью выложишь?


 
NailMan ©   (2004-12-24 17:19) [16]

Zak
Седня вечером(моим) выкладываю на сайт, там в статьях смотри

---
P.L.U.R. and WBR, NailMan aka 2:5020/3337.13


 
NailMan ©   (2004-12-24 22:32) [17]

Zak
Вот пожалуйста, комментарии, пожелания и какие недочеты можно высказывать - исправим.
http://nailman.cyborghome.ru/ut_article2_1.htm

ЗЫ: Сразу скажу писал несколько спеша, так что возможно что-то будет непонятно. Спрашивай не стесняйся.

---
P.L.U.R. and WBR, NailMan aka 2:5020/3337.13


 
Zak   (2004-12-26 09:25) [18]

NailMan, огромное спасибо, буду изучать : )


 
Cash ©   (2004-12-26 17:22) [19]

Парни. Знаете, кто естественно сидит, под Linux {KDE} есть вещь
KSpaceDuel (две машены по орбитам вокруг планеты крутятся)

Физика на УРОВНЕ, как и все остальное, этож линух.

Дак, подумав решил я смонстрячить такую на Omega9.f.
Как Wiz сказал, понадобилось три вектора перемещения, и еще два - на орбиту и двигатели. (это отдельно от вектора скорости)
Можно подсчет скорости сделать (фактически длина отрезка (x,y,dx,dy)) - теорема пифогора.
 {Сумма квадратов гепатинуз равна квадрату катета} :)
Изменять направление плавно - dx,dy изменять согласно углу объекта
dx - cos(DegToRad(aUnit.Angle360-90)),
dy - sin(DegToRad(aUnit.Angle360-90)),
 если при Angle360 = 0 юнит смотрит вверх.
 Angle360, само собой, в пределах [0..359]
 Его можно получить так: Angle360:=round(360/256 * Angle256);
 Мы же спрайты вращаем по 256-и градусам.
 Градусы обязательно в радианы переводить надо, и именно 360, не 256!



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

Форум: "Игры";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.035 c
6-1105909007
Sphinx
2005-01-16 23:56
2005.03.20
Примеры для Indy 10


3-1108544034
AlexTregubov
2005-02-16 11:53
2005.03.20
Как с помощью SQL-запроса узнать сколько человеку лет?


1-1109847063
Veles
2005-03-03 13:51
2005.03.20
Протокол модема в текстовый файл


8-1102138728
PaVV
2004-12-04 08:38
2005.03.20
формат Png и Delphi


8-1102160272
Студент_
2004-12-04 14:37
2005.03.20
Идентичное отображение на принтере





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский