![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 16.01.2008
Сообщений: 21
|
![]()
есть два Timage-объекта.. Как можно определить, пересеклись ли они?
Если выписывать все возможные варианты типа if Image1.Left >= Image2.Left and... это будет слишком долго и муторно. К тому же, нужно чтобы было как можно проще - это будет типа цикла от 1 до четырех ( нужно сравнить один image1 с image2[1], с image2[2], с image2[3], с image2[4]). К тому же сравнение идет в таймере с интервалом 15 мс... Может, сумбурно выразился.. хм.. |
![]() |
![]() |
![]() |
#2 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
![]()
> Если выписывать все возможные варианты типа
> if Image1.Left >= Image2.Left and... а для прямоугольных объектов так и делается. конечно ничего не делать - проще. хм.
Берегите друг друга!
|
![]() |
![]() |
![]() |
#3 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Интересно... Я бы сделал проверки как вы и описали, незнаю что еще Вы можете придумать.
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 16.01.2008
Сообщений: 21
|
![]()
хм.. я думал, может есть какой-то лучше способ
![]() где-то слышал, про PivotPoint - опорные точки.. Только принцип проверки не могу сформулировать.. |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
В Windows API для этого есть специальные функции, например IntersectRect. В сумме с GetWindowRect или GetClientRect я полагаю они дадут то, что нужно..
![]() |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 16.01.2008
Сообщений: 21
|
![]()
Спасибо ) Сейчас попробую разобраться, что за функции такие )
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 16.01.2008
Сообщений: 21
|
![]()
код:
var lpRect: TRect; res, RectGrreen, RectBlue: TRect; collis: boolean; ... for i:=1 to 4 do begin GetWindowRect(osnova.Handle,lpRect) ; GetClientRect(); RectGrreen:=imgGreen.ClientRect; RectBlue:=imgBlue[i].ClientRect; collis:= IntersectRect(res,RectGrreen,RectBl ue); if collis = false Then begin Collision:=true; exit; end else Collision:=false; end; И все равно не получается... в свое оправдание скажу, что с WinAPI работаю второй раз в жизни ![]() Последний раз редактировалось Fruit; 27.01.2008 в 11:10. |
![]() |
![]() |
![]() |
#8 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Ну а зачем Вы все в кучу-то?
![]() Если Вы уже берете прямоугольники как делфьийские property, то зачем в начале кода зовете GetClientRect и GetWindowRect? Я их написал, чтобы Вы выбрали, кто из них нужен. Кстати, может быть в TRect есть метод IntersectRect, негде глянуть. И еще, API не в курсе, что существуют такие штуки, как TRect, туда надо передавать адрес стандартного апишного RECT, иначе в зависимости от внутреннего устройства TRect, все будет непредсказуемо. ![]() |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 16.01.2008
Сообщений: 21
|
![]()
"Кстати, может быть в TRect есть метод IntersectRect, негде глянуть"
не... нету. ) По крайней мере я не нашел.. хмм.. не понял... я создаю переменную Trect, присваиваю ей этот imgGreen.ClientRect к примеру, передаю эту запись в APIшную функцию... в перем. res по идее, они должны показать 0 или что-нить др.? В смысле - 0 - не пересекаются.... |
![]() |
![]() |
![]() |
#10 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
IntersectRect ожидает указатель на RECT
Код:
![]() |
![]() |
![]() |