2013-03-26 12 views
1

Я столкнулся с некоторыми проблемами в своей игре на самом деле мне пришлось обнаружить эллипсо-эллипсовое столкновение Я предпочту коды на языке vb.net, поскольку я не могу понять никого другого любые подсказки с идеями или кодами ?эллиптические столкновения в vb.net?

ответ

0

Вы можете просто проверить столкновения с Region объектами и Region.Intersect метода:

Dim gp1 As New Drawing2D.GraphicsPath() 
gp1.AddEllipse(rect1) 

Dim gp2 As New Drawing2D.GraphicsPath() 
gp2.AddEllipse(rect2) 

Dim reg1 As New Region(gp1) 
Dim reg2 As New Region(gp2) 

reg1.Intersect(reg2) 

If reg1.GetRegionScans(New Drawing2D.Matrix(1, 1, 0, 1, 1, 0)).Length > 0 Then 
    MessageBox.Show("Collision!") 
End If 

В этом примере rect1 и rect2 являются Rectangle s, которые определяют (содержат) эллипсы, как при рисовании эллипсов с прямоугольником:

Dim rect1 As New Rectangle(5, 5, 150, 100) 
Me.CreateGraphics.DrawEllipse(Pens.Blue, rect1) 


EDIT:

Для обеспечения эффективности и возможностей вам лучше использовать игровой движок. Проверьте ссылки:

+0

другу спасибо, но это очень медленно, я не могу использовать его в своей игре делает это для 5 раз только делает fps менее 50 !!! Мне нужно, чтобы около 100 обнаружений коллизий на самом деле он недостаточно эффективен для использования в программировании игры любых других идей? –

+0

Я не думаю, что есть более эффективный способ. Вы можете сделать свою собственную математику для проверки столкновений, что улучшит производительность. Просто выполните поиск в google для «столкновения эллипса». Другим быстрым вариантом может быть проверка столкновения прямоугольников с помощью 'rect1.IntersectWith (rect2)', но он будет проверять всю область прямоугольника не только на области эллипса. – SysDragon

+0

Если вам нужна производительность, вы должны использовать правильный игровой движок, и не использовать эту причину не оптимизированы для разработки игр. Не за исключением хороших методов для работы здесь. В хорошем двигателе у вас будет все, что вам нужно, чтобы проверить все эффективно. – SysDragon