|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.05.2009, 20:33 | #1 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Обработка столкновений окружностей.
Я написал модуль для своего движка, который позволяет обрабатывать столкновения с окружностями.Выкладываю demo(движение окружности клавишами wasd).Если кого заинтересует как сделать такое могу обьяснить.
|
14.05.2009, 21:34 | #2 |
Пользователь
Регистрация: 24.01.2009
Сообщений: 36
|
Да хотел бы услышать объяснения)
|
15.05.2009, 10:03 | #3 |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
ты просто узнаешь расстояние от центра одной окружности до центра другой (по теореме пифагора) и сравниваешь с суммой их радиусов?
Nobody expects Spanish Inquisition!
|
15.05.2009, 14:57 | #4 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
формулировка подразумеват столкновение окружностей с чем угодно
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс Последний раз редактировалось ROD; 15.05.2009 в 17:27. |
15.05.2009, 17:14 | #5 |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
да? а почему в ЕХЕшнике этого нету?
Nobody expects Spanish Inquisition!
|
15.05.2009, 17:26 | #6 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Значит автор немного не правильно сформулировал предложение.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
15.05.2009, 17:28 | #7 | |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Цитата:
|
|
15.05.2009, 19:02 | #8 | ||
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Работа с коллизией окружностей.
Цитата:
Цитата:
возможность определить точку, в которой произошло столкновение и др. Начну с того, что я за время программирования придумал две системы проверки столкновений: по сторонам прямоугольника(только квадраты и прямоугольники) и по точкам(любая геом. фигура(пока только для окружностей)). Система заточена под мой движок, поэтому примеры будут на нем(если нужно можно перенести систему в любую программу или игру без проблем, ведь главное идея а не исполнение). Движок состоит из модулей Engine.pas --- основной модуль MainClass.pas - тут находится класс TGraphicObject для обьектов на экране Effects2D.pas - класс для работы с анимациями Characters.pas - класс для работы с игроком и AI Sound2D.pas - класс для работы со звуком и нужные для работы со столкновениями модули Geometry2D.pas - геометрия CollisionSys.pas - модуль обработки столкновений Идея этой системы в том, что каждый объект на экране имеет переменную, которая включает в себя точки, необходимые к проверке на столкновение.(В TGraphicObject есть переменная PhysPoint типа TPhysPoints) PhysPoint , изначально пуста т.е в нее не занесены точки для проверки.Теперь нам нужно их занести.Вручную это делать невозможно, позтому пользуемся функцией(эта для занесения точек окружности(подобную функцию можно написать для чего угодно, например многоугольников, квадратов, треугольников и.т.д )) Код:
(функция PointsCollision в модуле CollisionSys.pas) Код:
Также мы можем вывести рисунок по точкам из PhysPoint процедурой Код:
Скачайте движок, откройте в Delphi проект и перейдите к файлу Engine.pas к процедуре LoadEngine(тут происходит загрузка наших окружностей). Сделаю пример простого создания окружности с помощью PhysPoint (пример1) Код:
Код:
Тут я не буду писать код создания второй окружности, а напишу код для движения окружности клавишами WASD и проверку столкновения В процедуре KeysDown пишем Код:
Код:
Также я собираюсь делать редактор коллизий. P.S Во всех примерах выход клавишей EcsAP2 |
||
15.05.2009, 19:10 | #9 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
В этом случае двигаться налево немогу, хотя препятствий вроде нет.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
15.05.2009, 19:23 | #10 | |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Цитата:
Но я знаю в чем дело: просто в данном примере коллизия работает с опережением, и дальность опережения зависит от скорости движения объекта.Т.е чем больше скорость тем больше погрешность(тут 1 пиксель) Я знаю как это убрать и могу объяснить что значит "коллизия работает с опережением",если конечно надо. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сопряжение окружностей | GibiW | Мультимедиа в Delphi | 5 | 06.04.2009 23:18 |
Код проверки столкновений не работает. | Манжосов Денис :) | Общие вопросы Delphi | 8 | 02.02.2009 10:31 |
Даны координаты центров n окружностей.... | ZhooZhik | Помощь студентам | 3 | 09.01.2008 19:11 |
Добавление окружностей | ivp88 | Помощь студентам | 3 | 14.02.2007 16:31 |