Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Collision

Delphi , Графика и Игры , DirectX и DelphiX

Collision

Оформил: XVeL
Автор: Daddy
WEB-сайт: http://daddy.mirgames.ru

Итак, у нас есть спрайты. Они рисуются, двигаются, но не взаимодействуют друг с другом. И вот для того, что бы мячики отскакивали, пули попадали во врага, а герои не проваливались сквозь пол, в DelphiX есть замечательная вещь как проверка на столкновение, которая в большинстве случаев поможет избежать написание собственного движка.
Есть два метода определение столкновений.
1. Проверка столкновения рамок: Простой тип, слежение идет за взаимным положением рамок спрайтов. При обнаружении пересечения координат, ябъявляется событие "столкновение"
2. Проверка столкновения точек: Сложный тип. Слежение ведется не только за взаимным положением рамок спрайтов, но и за взаимным положением самих изображений. Событие "столкновение" объявляется при обнаружении пересечения точек изображений.

Рамка
Рамка определят размер спрайта, что дает взаимодействовать спрайтам друг с другом. Так же рамка нужна для определения момента обрезания спрайта, при выходе за экран. Одним словом вещь крайне важная. Если не указать ширину и высоту рамки, DelphiX будет выводить спрайт, но не сможет определять столкновения
Проверка на столкновение рамок 1


столкновение есть
Столкновение рамок
Как вы видите столкновение произошло. Но сами спрайты не коснулись друг-друга.Это не очень красиво, но зато очень быстро.

столкновения нет



столкновение есть

Проверка на столкновение рамок 2
Есть ещё один способ проверки столкновения без PixelCheck.
                        const Border = ...;
                        with TAnyObject.Create(MyForm.DXSpriteEngine.Engine) do
                        begin
                        Image:=...;
                        Width:=Image.PatternWidth - 2*Border;
                        Height:=Image.PatternHeight - 2*Border;
                        ...
                        end;
                        
В этом случае картинка будет выводиться полностью, но квадрат столкновений уменьшится. Необходимо изменить также и DoMove, ведь X = OldX + Border и Y = OldY + Border. Именно этот способ как правило используется в аркадах.
Проверка на столкновение точек


столкновения нет
Проверка на столкновение точек
Более точный и красивый. Проверка на столкновение самих изображений. Больше подходит для сложных спрайтов. Требует большей загрузки процессора..
Проверка на столкновение точек


столкновение есть
Более точное определение столкновения
Два пиксела проверяют спрайты на столкновение. Как видно рамки давно столкнулись, но событие поизошло только когда столкнулись непрозрачные части.
Проверка на столкновение рамки и точки


столкновения нет
Смешивание типов обнаружения столкновения
Спрайты, использующие разные методы определения столкновения то-же будут сталкиваться друг с другом. Один спрайт использует определение по рамке, другой по точке. Иногда смешиванием можно добиться неплохих, реалистичных результатов..
Проверка на столкновение рамки и точки


столкновение есть
Альтернатива -(не лучшее решение, но альтернативное...)
Как вы видите это не слишком великолепно. Игрок может видет, что спрайты не столкнулись на самом деле, а игра будет определять, что стокновение произошло после попадания рамки одного спрайта на непрозрачную точку другого.

Выбор метода зависит от игры. Если это активная Аркада, то Проверка на столкновение точек в ней ни к чему. Глаз не будет успевать замечать, что столкновения произошло на пяток пикселей раньше, чем положено. А если это размеренная, несуетливая РПГ, то без этого метода не обойтись.

Настройка обнаружения столкновений
Основные шаги, необходимые для этого.
· Создаем класс спрайта в обычном порядке
· Включаем DoMove процедуру
· Включаем (override)DoCollision процедуру
· Устанавливаем высоту и ширину спрайта.
· В процедуре DoMove вызываем метод Collision.
· В методе DoCollision, помещаем код, для обработки последствий столкновения.
· Выбираем метод обнаружения столкновений.

Статья Collision раздела Графика и Игры DirectX и DelphiX может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: DirectX и DelphiX ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
29.03.2024 01:27:55/0.039555072784424/0