Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 1691
∙ повысить рейтинг »
lamed
Статус: Практикант
Рейтинг: 1216
∙ повысить рейтинг »
Jimhucksly
Статус: 5-й класс
Рейтинг: 664
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Delphi и Lazarus

Номер выпуска:1479
Дата выхода:12.01.2010, 04:00
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:583 / 224
Вопросов / ответов:1 / 1

Вопрос № 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
...
Конечно я мог ошибиться в самой логике. Поэтому прошу вас помочь доработать код.
Заранее благодарен.

Отправлен: 07.01.2010, 02:31
Вопрос задал: Dimon4ik, 5-й класс
Всего ответов: 1
Страница вопроса »


Отвечает Тимошенко Дмитрий, Студент :
Здравствуйте, Dimon4ik.

Условие проверки должно быть таким:

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 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.13 от 28.12.2009

    В избранное