Взаимодействие двух объектов.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Взаимодействие двух объектов.

Сообщение La_fleur_ » 31.01.2018 19:56:50

Всем hi. Нужна небольшая помощь. У меня на форме есть два объекта типа shape. Один двигается. Как сделать, чтобы один объект при косание другого останавливался? Варианты типа:

If Shape4.top>= shape1.top then timer1.enabled:=false;
If Shape4.left<= shape1.left+shape1.width then timer1.enabled:=false;
И все в таком духе я пробовал .Остановка происходит всегда когда значение одного объекта по y больше или равно другого по y. А мне нужно сделать, чтобы объект останавливался именно тогда, когда косается другого объекта. Тут как-то надо через текущие координаты объекта делать. Когда координата одного объекта совпадает с другой, то выполняется наше условие. Буду очень признателе любой помощи
La_fleur_
незнакомец
 
Сообщения: 1
Зарегистрирован: 31.01.2018 19:48:47

Re: Взаимодействие двух объектов.

Сообщение olegy123 » 02.02.2018 04:40:30

La_fleur_ писал(а):чтобы один объект при косание другого останавливался?
Эти объекты - простые примитивы? Точка, линия, окружность, прямоугольник... или сложную геометрию.

La_fleur_ писал(а):Тут как-то надо через текущие координаты объекта делать.
Делается нуль координата/базовая/начало координат для объекта - [xyz]. Сам объект может описан другими параметрами(высота, длина, радиус,путь(path)..) - эти данные рисуют фигуру по отношению от [xyz].
меняется [xyz], фигура рисуется по отношению к новой координате [xyz] (вектора складываются). Если сложные объекты то может стоить применить математику матриц.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20


Re: Взаимодействие двух объектов.

Сообщение sign » 02.02.2018 07:27:11

La_fleur_ писал(а):Всем hi. Нужна небольшая помощь. У меня на форме есть два объекта типа shape. Один двигается. Как сделать, чтобы один объект при косание другого останавливался? Варианты типа:

If Shape4.top>= shape1.top then timer1.enabled:=false;
If Shape4.left<= shape1.left+shape1.width then timer1.enabled:=false;

Код: Выделить всё
  if Shape4.BoundsRect.IntersectsWith(Shape1.BoundsRect) then...;
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 38

Рейтинг@Mail.ru