Вопрос № 175884: Здраствуйте Уважаемые эксперты. Помогите написать одну вещь. А именно: У меня на форме есть два компонента TImage - Image1, Image2. Они двигаются по диагонали. Я хочу сделать так, чтобы при столкновении они друг от друга отскакивали. Как они о...
Вопрос № 175884:
Здраствуйте Уважаемые эксперты. Помогите написать одну вещь. А именно: У меня на форме есть два компонента TImage - Image1, Image2. Они двигаются по диагонали. Я хочу сделать так, чтобы при столкновении они друг от друга отскакивали. Как они отскакивают я уже написал. Работает нормально. Но со столкновением не могу разобраться. Очень долго сидел, но зачастую добивался только того, что они когда уже пролетят друг через друга срабатывает действие. Я прошу помочь прописать именно момент столкновения.
Как в сравненнии изобразить все это, а именно каждую ситуацию столкновения, сверху снизу, слева справа, не зависимо от того толи то Image1 задела Image2 или наоборот. Для того чтобы это прописать нужно знать размеры компонентов. У обоих компонентов: Width=33; Height=33;
Вот мои наработки, но это вовсе не рабочий вариант. Хотя вроде бы некоторые ситуции предусмотрел. if (((image1.left+33>=image2.left) and (image1.left+40<=image2.left))or ((i
mage2.left+33>=image1.left) and (image2.left+40<=image1.left)) ) And (((image1.top+50>=image2.top) and (image1.top+80<=image2.top)) or ((image2.top>=image1.top+50) and (image2.top+80<=image1.top))) then ... Конечно я мог ошибиться в самой логике. Поэтому прошу вас помочь доработать код. Заранее благодарен.
if ((Image1.Top+Image1.Height>=Image2.Top) and (Image1.Top<=Image2.Top) or (Image2.Top+Image2.Height>=Image1.Top) and (Image2.Top<=Image1.Top)) and ((Image1.Left+Image1.Width>=Image2.Left) and (Image1.Left<=Image2.Left) or (Image2.Left+Image2.Width>=Image1.Left) and (Image2.Left<=Image1.Left)) Then ...
Первые четыре сравнения проверяют пересечение картинок по вертикали, другие четыре - по горизонтали.
(Для срабатывания должны выполняться оба блока). Первые два из четырех учитывают ситуацию, когда Image1 выше/левее Image2, а вторые соответственно, когда Image2 выше/левее Image1. (Должна выполняться хотя бы одна пара условий).
С уважением, Дмитрий
Ответ отправил: Тимошенко Дмитрий, Студент
Ответ отправлен: 10.01.2010, 08:33
Оценка ответа: 5 Комментарий к оценке: Отличное условие, все работает! Спасибо. Отличный ответ!
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 258521
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.