Страница: 1 | 2 |
Вопрос: Столкновения PictureBox
Добавлено: 03.07.06 17:36
Автор вопроса: Wolf4D | Web-сайт:
Люди, кто знает, как отследить столкновения PictureBox? По общим координатам не предлагать!
Ответы
Всего ответов: 28
Номер ответа: 1
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #1
Добавлено: 03.07.06 18:39
Что ты имеешь в виду?
Номер ответа: 2
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #2
Добавлено: 03.07.06 19:27
Один PictureBox наезжает на другой. Они перекрываются.
Номер ответа: 3
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #3
Добавлено: 04.07.06 09:08
Как еще отследить как ни по координатам...
Другова способа мне кажется нет.
Номер ответа: 4
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #4
Добавлено: 04.07.06 12:09
Мда.
Прийдётся либо долго разбираться с координатами (а они у меня глючат страшно), либо переделывать всё под Direct3D (там такие столкновения проследить возможно)
Номер ответа: 5
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #5
Добавлено: 04.07.06 14:44
пересечение прямоугольников на АПИ может? но там тоже координаты
Номер ответа: 6
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #6
Добавлено: 04.07.06 16:32
Глючат координаты или не глюча, но они есть!
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-сайт:
Профиль | | #7
Добавлено: 04.07.06 18:18
Координаты-то есть, их не быть не может, но отслеживаются они у меня совершенно странно: в одном месте отслеживаются, в другом - нет. Поставил PictureBox в одно место-отслеживаются, перенёс на 20 твипов влево-не отслеживаются. Мистика какая-то!
Но сейчас фикс поглючен... э-э-э... глюк пофиксен и всё ПОКА работает. Проблема, скорее всего, была в компиляторе (а возможно, и осталась, надо-бы переустановить его).
Номер ответа: 8
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #8
Добавлено: 04.07.06 20:06
А может дело как раз в твипах? Ты попробуй пиксели.
Номер ответа: 9
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #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
Спасибо, посмеялся
Не зови в следующий раз
Номер ответа: 11
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #11
Добавлено: 05.07.06 16:09
Ну тут добавить не'чего.
Номер ответа: 12
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #12
Добавлено: 05.07.06 17:11
Мда... насколько я знаю VB6 к NETу никакого отношения не имеет, но могу и ошибаться...
Ну а с циклом без отрицательного шага... Это вообще прикол. Спасибо насмешил...
Номер ответа: 13
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #13
Добавлено: 05.07.06 22:01
Я не об этом. Я сейчас работаю в Microsoft Visual Basic 6.0 Corporate SP5. И хочу попробовать Net.
Хмм...
В других языках работало :[
Можете назвать меня чайником, но объясните, почему не работает? Компилятору-же вроде всё равно должно быть, в какую сторону считать...
А тех, кого я звал, в VB действительно ни разу не работали.
Номер ответа: 14
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #14
Добавлено: 06.07.06 13:30
Тогда сорри, про НЕТ не понял просто.
Вот именно что ему все равно, ему пофиг в какую сторону тебе нужно считать. Он считает цикл с шагом по умолчанию 1, т.е. на возрастание. А в твоем случае от 50 до 0 он вообще не считает т.к. условия не те, тебе нужно ставить
Номер ответа: 15
Автор ответа:
LeX
ICQ: 301424893
Вопросов: 28
Ответов: 277
Web-сайт:
Профиль | | #15
Добавлено: 06.07.06 17:31
Есть возможность осуществить это без апи. Вот пример для людей, которые не любят (или даже ненавидят) апи (в основном дотнетчики):
if picture2.left=picture1.left+picture1.width
C другой стороны изменить picture1 на picture2. А сверху и снизу вместо left и width - юзать top и height.