Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Пересечение объектов Добавлено: 08.10.04 21:17  

Автор вопроса:  Alexey333 | ICQ: 127708322 
Извиняюсь за простой вопрос, но что-то где читал ответа на него не видел, а вопрос принципиально важный.
Как зафиксировать пересечение 2 объектов?
Например, во флэше для этого есть специальная функция: если хотя бы часть объекта А затрагивает площадь объекта В, то это событие можно зафиксировать и произвести определенные действия. Я делал игру про танчики и, например, если танк (управляется стрелками клавиатуры как обычно) касается мины, то ты проигрываешь.
Есть ли в VB что-либо подобное?

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #1 Добавлено: 08.10.04 21:19
По координатам, наверное

Ответить

Номер ответа: 2
Автор ответа:
 Alexey333



ICQ: 127708322 

Вопросов: 4
Ответов: 29
 Профиль | | #2 Добавлено: 08.10.04 21:37
Во флэше просто указываешь имена объектов. Никакие координаты не надо высчитывать. Здесь мне хочется тоже самое.

Ответить

Номер ответа: 3
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #3 Добавлено: 09.10.04 00:32
Не думал насчёт API-функций IntersectRect и IsRectEmpty? я не знаю, конечно, как ты там сделал свои танчики и мины, но если они прямоугольные - то эти функции подходят.

Хотя... если они у тебя прямогульные, то и без всяких АПИ можно :-))

Можно также покопать в сторону PtInRect и/или PtInRegion.

Ответить

Номер ответа: 4
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #4 Добавлено: 09.10.04 01:27
Того что ты хочешь нет.
Я советую (если объекты прямоугольные) сравнивать пересечение их RECT'ов

Ответить

Номер ответа: 5
Автор ответа:
 Alexey333



ICQ: 127708322 

Вопросов: 4
Ответов: 29
 Профиль | | #5 Добавлено: 09.10.04 06:11
Comanche, я еще далеко не большой знаток как большинство здесь и многие функции (особенно API) вообще слышу в первый раз. Поэтому то и спрашиваю, так как перебирать все функции методом тыка и проб займет очень много времени.
ZagZag, а какой функцией сравнивается пересечение прямоугольников?

Ответить

Номер ответа: 6
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #6
Добавлено: 09.10.04 19:12
Почитай про bound box если не найдешь напишу подробнее. Вкратце пересечение объектов. прямоугольной формы легко вычисляется по их координатам(примоугольников)

Ответить

Номер ответа: 7
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #7 Добавлено: 09.10.04 23:41
Да... я имел в виду самостоятельное сравнивание двух RECT
Вот выкидываю модуль... скажите что не так? Не принимает эта функция RECT
переменные - засел... :)

'Дата создания: 09.10.2004 23:38
'Автор: ZagZag (zagzag@xaker.ru)

[CODE]
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Function IsIntersection(ByRef rct1 As RECT, ByRef rct2 As RECT) As
Boolean
IsIntersection = False
rct1.Bottom = rct1.Bottom - rct1.Top
rct1.Right = rct1.Right - rct1.Left
rct2.Bottom = rct2.Bottom - rct2.Top
rct2.Right = rct2.Right - rct2.Left

' 12
' 34

'1
If (rct1.Left > rct2.Left And rct1.Left < rct2.Right) And (rct1.Top >
rct2.Top And rct1.Top < rct2.Bottom) Then
IsIntersection = True
Exit Function
End If

'2
If (rct1.Right > rct2.Left And rct1.Right < rct2.Right) And (rct1.Top >
rct2.Top And rct1.Top < rct2.Bottom) Then
IsIntersection = True
Exit Function
End If

'3
If (rct1.Left > rct2.Left And rct1.Left < rct2.Right) And (rct1.Bottom >
rct2.Top And rct1.Bottom < rct2.Bottom) Then
IsIntersection = True
Exit Function
End If

'4
If (rct1.Right > rct2.Left And rct1.Right < rct2.Right) And (rct1.Bottom >
rct2.Top And rct1.Bottom < rct2.Bottom) Then
IsIntersection = True
Exit Function
End If

End Function
[/CODE]

Ответить

Номер ответа: 8
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #8 Добавлено: 10.10.04 16:38
Зачем изобретать велосипед, когда есть АПИ IntersectRect?

Ответить

Номер ответа: 9
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #9 Добавлено: 11.10.04 13:39
[CODE]Declare Function IntersectRect Lib "user32.dll" (lpDestRect As RECT,
lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long[/CODE]

А как ей правильно пользоваться

Например я не понял что есть первый параметр

PS: Свой "велосипед" по-своему уникален :)


Ответить

Номер ответа: 10
Автор ответа:
 Alexey333



ICQ: 127708322 

Вопросов: 4
Ответов: 29
 Профиль | | #10 Добавлено: 13.10.04 11:32
Тоже не знаю как ей пользоваться, поэтому написал свой скрипт. Все вроде работает нормально.

Dim pic1k1y As Long, pic1k2y As Long, vertper As Boolean
Dim pic1k1x As Long, pic1k2x As Long, horizper As Boolean
pic1k1y = Picture1.Top
pic1k2y = Picture1.Top + Picture1.Height
If Picture2.Top <= pic1k2y And Picture2.Top >= (pic1k1y - Picture2.Height) Then
vertper = True
Else
vertper = False
End If
pic1k1x = Picture1.Left
pic1k2x = Picture1.Left + Picture1.Width
If (Picture2.Left + Picture2.Width) >= pic1k1x And Picture2.Left <= pic1k2x Then
horizper = True
Else
horizper = False
End If
If vertper = True And horizper = True Then
MsgBox "Объекты пересекаются!"
End If

Ответить

Номер ответа: 11
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #11 Добавлено: 13.10.04 11:39
Dim rct1 As RECT, rct2 As RECT, rctDest As RECT
SetRect rct1, 0, 0, 100, 100
SetRect rct2, 50, 50, 80, 120
IntersectRect rctDest, rct1, rct2
If IsRectEmpty(rctDest) = 0 Then MsgBox "Пересекаются"

Ответить

Номер ответа: 12
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #12 Добавлено: 13.10.04 14:36
+OK :)
Понял тоесть
Спасибо

Ответить

Номер ответа: 13
Автор ответа:
 Alexey333



ICQ: 127708322 

Вопросов: 4
Ответов: 29
 Профиль | | #13 Добавлено: 13.10.04 14:59
+OK :)
Понял тоесть

А я нет :)
Но меня и свой вариант устраивает :)

Ответить

Номер ответа: 14
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #14 Добавлено: 14.10.04 11:48
Какой такой "свой"? Поделись?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам