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

Вниз

GLScene Проверка коллизий между пулями и монстрами. Как сделать ?   Найти похожие ветки 

 
Кен   (2003-05-04 04:40) [0]

И как сделать, чтобы быстрее работало ? Проверять в лоб, то есть все пули на всех монстров - наверно слишком медленно получится. А как иначе ?

Другой вопрос - как оценивать повреждения монстрам ? Там в голову - смерть. В руку - ранение. В сердце - смерть. Как это сделать ?


 
Alek Aaz   (2003-05-04 06:13) [1]

Я уже вроде предлогал.
1. Кастаем луч из центра пули.
2. Определяем точку пересечения с плоскостью
3. Определяем кому принадлежит плоскость.(стена, окно, монстер, небо)
4. Генерим событие. С координатами.
5. Отрабатываем событие. Если монстер по координатам вычисляем процентовку унесенной жизни, стекло - разбиваем его в дребезги, стена - убираем пулю, рисуем в месте попадания дырдочку. Если в небо - убираем пульку.
Это только теория.
2Кен
Ты коллизии уже делал?


 
Кен   (2003-05-05 01:47) [2]

Alek Aaz ©
Коллизии нет. С ними похоже все проблемы и связаны. В моей демке ( http://www.triponavtika.narod.ru/game.html}, коллизии с домом по примеру boxedin"а неполучаются. Вернее всё глючно очень. Проще наверно дом обрисовать кубом, а актёра другим кубом, и проверять коллизии между кубами. И так обрисовывать кубами вообще все дома деревья, столбы и прочие объекты которые в игру вставляются. Геморойно конечно, но хоть более-менее нормально работает.


> 1. Кастаем луч из центра пули.
> 2. Определяем точку пересечения с плоскостью
> 3. Определяем кому принадлежит плоскость.(стена, окно, монстер,
> небо)
> 4. Генерим событие. С координатами.
> 5. Отрабатываем событие. Если монстер по координатам вычисляем
> процентовку унесенной жизни, стекло - разбиваем его в дребезги,
> стена - убираем пулю, рисуем в месте попадания дырдочку.
> Если в небо - убираем пульку.
> Это только теория.

Хорошо бы эту теорию в виде кода.
Пули должны лететь не моментально, а медленно, чтобы от них можно было увернуться. Иначе весь смысл игры теряется. Ничего не успеваешь, как уже убит.

И потом пуля - это TSphere, значит можно как то коллизии с ней обрабатывать, по примеру демки sphere. Может обрисовывать монстров кубами и проверять коллизии с пулями ? Голова и сердце - как бы один куб, смертельный. А всё остальное другой куб, не смертельный.

Кстати, как тебе мои пули с инерцией и автоудалением через 2 секунды ?
( http://delphimaster.net/view/9-1050597191/ )


 
Alek Aaz   (2003-05-05 13:24) [3]

Коллизии нет.
Вообще обязана быть. Или что-то неправильно сделал, или скорость пули слишком большая. Уменьши скорость пули.

В моей демке ( http://www.triponavtika.narod.ru/game.html}, коллизии с домом по примеру boxedin"а неполучаются. Вернее всё глючно очень. Проще наверно дом обрисовать кубом, а актёра другим кубом, и проверять коллизии между кубами. И так обрисовывать кубами вообще все дома деревья, столбы и прочие объекты которые в игру вставляются. Геморойно конечно, но хоть более-менее нормально работает.
Не понял ничего ... Ты хочешь сказать, что когда объект как boxedin, то дерево(с веточками) программа рассматривает как куб так? :) Це так и задумано.

Хорошо бы эту теорию в виде кода.
Ага, классно бы получилось :)

Кстати, как тебе мои пули с инерцией и автоудалением через 2 секунды ?
Да никак. Демку скачал. Тока чтой-то винда выдает, что exe"шник совсем не правильный exe"шник.


 
Кен   (2003-05-06 01:20) [4]

Alek Aaz ©
> Коллизии нет.
> Вообще обязана быть.

Я имел ввиду, что не делал пока. Пока разбираюсь только с ними. Иногда действительно пули проскакивают мимо монстров, когда fps слишком маленький.

> Не понял ничего ... Ты хочешь сказать, что когда объект
> как boxedin, то дерево(с веточками) программа рассматривает
> как куб так? :) Це так и задумано.

Дом - он квадратный. По его размерам можно сделать невидимый куб в GLScene и проверять с этим кубом коллизии. У дерева в области земли - ствол идущий вертикально вверх. По размерам ствола рисуем прямоугольник. И проверяем коллизии с ним. Это намного быстрее будет работать, чем проверять коллизи с FreeForm и каждым её треугольником.
Куба - это всего 12 треугольников.

> Да никак. Демку скачал. Тока чтой-то винда выдает, что exe"шник
> совсем не правильный exe"шник.

Откомпилируй заново. Исходник же прилагается. У меня всё работает. Пули летят давольно красиво. Веером. Особенно когда откуда нибудь сверху полишь.


 
Alek Aaz   (2003-05-06 03:59) [5]

дерева в области земли - ствол идущий вертикально вверх. По размерам ствола рисуем прямоугольник.
Це и есть всякие "B,Q - деревья". Читал где-то.
Это намного быстрее будет работать, чем проверять коллизи с FreeForm и каждым её треугольником.
Вполне может быть. Не проверял.
Откомпилируй заново
Ну нету па работе Delphi, нету ... :(


 
Кен   (2003-05-06 05:22) [6]

> Ну нету па работе Delphi, нету ... :(
А где есть ? Как же ты пишешь на нём тогда ?


 
Alek Aaz   (2003-05-07 03:58) [7]

Дома есть. Правда дома нет :) (съезжаю я от родичей)
Так что пока никак не пишу :)


 
Кен   (2003-05-07 06:11) [8]

Alek Aaz ©
Сделал я коллизии пуль и монстров. Встроенными в GLScene средствами. В общем давольно просто оказалось. И тормозят не столько коллизии, сколько модели монстров.
Теперь можно по ним стрелять и они дохнут. Только вот вооружить их пока неполучилось. Незнаешь, где можно найти md2-модели животных ? Тигров там, быков из Сэма, крокодилов, кенгуру ?



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

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

Наверх




Память: 0.48 MB
Время: 0.042 c
6-41777
XHelp
2003-09-07 00:28
2003.11.13
Подсчет трафика в делфи


1-41531
афвуд
2003-10-28 11:01
2003.11.13
Проблема с методом Popup у PopupMenu


3-41112
arche
2003-10-23 09:19
2003.11.13
Есть база, с ней напрямую работают два разных приложения,


7-42173
hfa
2003-09-04 17:58
2003.11.13
Как узнать серийный номер харда....


14-42046
Zhouck
2003-10-15 13:49
2003.11.13
Помогите вычислить злобного хакера-киддиса





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