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