Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 |

 

  Вопрос: Столкновения PictureBox Добавлено: 03.07.06 17:36  

Автор вопроса:  Wolf4D | Web-сайт: www.madnesstudio.ru
Люди, кто знает, как отследить столкновения PictureBox? По общим координатам не предлагать!

Ответить

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

Номер ответа: 1
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #1
Добавлено: 03.07.06 18:39
...столкновения PictureBox...

Что ты имеешь в виду?

Ответить

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



Вопросов: 20
Ответов: 131
 Web-сайт: www.madnesstudio.ru
 Профиль | | #2
Добавлено: 03.07.06 19:27
Один PictureBox наезжает на другой. Они перекрываются.

Ответить

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



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #3 Добавлено: 04.07.06 09:08
Как еще отследить как ни по координатам...
Другова способа мне кажется нет.

Ответить

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



Вопросов: 20
Ответов: 131
 Web-сайт: www.madnesstudio.ru
 Профиль | | #4
Добавлено: 04.07.06 12:09
Мда.
Прийдётся либо долго разбираться с координатами (а они у меня глючат страшно), либо переделывать всё под Direct3D (там такие столкновения проследить возможно)

Ответить

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



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #5
Добавлено: 04.07.06 14:44
пересечение прямоугольников на АПИ может? но там тоже координаты

Ответить

Номер ответа: 6
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #6
Добавлено: 04.07.06 16:32
они у меня глючат страшно

Глючат координаты или не глюча, но они есть!

Private Declare Function IntersectRect Lib "user32" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Sub Form_Load()
Dim r1 As RECT, r2 As RECT, r3 As RECT
GetWindowRect Picture1.hwnd, r1
GetWindowRect Picture2.hwnd, r2
If IntersectRect(r3, r1, r2) Then MsgBox "пересекаются" Else MsgBox "не пересекаются"
End Sub

Ответить

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



Вопросов: 20
Ответов: 131
 Web-сайт: www.madnesstudio.ru
 Профиль | | #7
Добавлено: 04.07.06 18:18
Глючат координаты или не глюча, но они есть!


Координаты-то есть, их не быть не может, но отслеживаются они у меня совершенно странно: в одном месте отслеживаются, в другом - нет. Поставил PictureBox в одно место-отслеживаются, перенёс на 20 твипов влево-не отслеживаются. Мистика какая-то!

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

Ответить

Номер ответа: 8
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #8
Добавлено: 04.07.06 20:06
А может дело как раз в твипах? Ты попробуй пиксели. :)

Ответить

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



Вопросов: 20
Ответов: 131
 Web-сайт: www.madnesstudio.ru
 Профиль | | #9
Добавлено: 05.07.06 13:09
Вряд-ли.
Дело в компиляторе (на 90% уверен).
Обнаружил ещё один глюк:

Dim historyT(0 to 255) as Variant
*
*
*
Private Sub Timer1_Timer()
*
*
*
For i = 50 To 0
historyT(i) = historyT(i - 1)
Next i
historyT(0) = sh.Top
*
*
*
end sub
*
*
*

Разъясняю: звёздочки - это тот код, который никакой роли в осознании проблемы не выполняет; sh - это PictureBox (менял на Image - без разницы). Т.е. новые значения поступают в массив, а старые в это время сдвигаются на 1 единицу.
Самое смешное в том, что код внутри цикла НЕ ВЫПОЛНЯЕТСЯ! Позвал людей, знакомых с программированием не по наслышке, они посмотрели, подтвердили внешнюю правильность кода и удивились результату.
Я даже BreakPoint внутрь ставил на строчку "historyT(i) = historyT(i - 1)" - не попадает компилятор на BreakPoint.
Теперь решил перейти на NET: Microsoft Visual Basic 6.0 Corporate SP5, установленный у меня, возможно, не совсем корректно работает на моей не совсем правильной связке Hard-Soft: Athlon64 + Windows XP SP2 (не Windows XP x64). Завтра поеду закупаться дистрибутивами.

Ответить

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



ICQ: 176176951 

Вопросов: 14
Ответов: 655
 Профиль | | #10 Добавлено: 05.07.06 13:19
For i = 50 To 0

Спасибо, посмеялся :-)

For i = 50 To 0 Step -1


Не зови в следующий раз
людей, знакомых с программированием не по наслышке
.

Ответить

Номер ответа: 11
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #11
Добавлено: 05.07.06 16:09
Ну тут добавить не'чего. :)

Ответить

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



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #12 Добавлено: 05.07.06 17:11
Теперь решил перейти на NET: Microsoft Visual Basic 6.0 Corporate SP5

Мда... насколько я знаю VB6 к NETу никакого отношения не имеет, но могу и ошибаться...

Ну а с циклом без отрицательного шага... Это вообще прикол. Спасибо насмешил...

Ответить

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



Вопросов: 20
Ответов: 131
 Web-сайт: www.madnesstudio.ru
 Профиль | | #13
Добавлено: 05.07.06 22:01
Мда... насколько я знаю VB6 к NETу никакого отношения не имеет, но могу и ошибаться...

Я не об этом. Я сейчас работаю в Microsoft Visual Basic 6.0 Corporate SP5. И хочу попробовать Net.
Спасибо, посмеялся :-)

Хмм...
В других языках работало :[
Можете назвать меня чайником, но объясните, почему не работает? Компилятору-же вроде всё равно должно быть, в какую сторону считать...
А тех, кого я звал, в VB действительно ни разу не работали.

Ответить

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



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #14 Добавлено: 06.07.06 13:30
Тогда сорри, про НЕТ не понял просто.
Компилятору-же вроде всё равно должно быть, в какую сторону считать...

Вот именно что ему все равно, ему пофиг в какую сторону тебе нужно считать. Он считает цикл с шагом по умолчанию 1, т.е. на возрастание. А в твоем случае от 50 до 0 он вообще не считает т.к. условия не те, тебе нужно ставить
Step -1

Ответить

Номер ответа: 15
Автор ответа:
 LeX



ICQ: 301424893 

Вопросов: 28
Ответов: 277
 Web-сайт: www.vbkoders.info
 Профиль | | #15
Добавлено: 06.07.06 17:31
Есть возможность осуществить это без апи. Вот пример для людей, которые не любят (или даже ненавидят) апи (в основном дотнетчики:)):
if picture2.left=picture1.left+picture1.width
C другой стороны изменить picture1 на picture2. А сверху и снизу вместо left и width - юзать top и height.

Ответить

Страница: 1 | 2 |

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



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