Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Епрст....   Найти похожие ветки 

 
Hex0DesiMaL ©   (2004-01-20 09:08) [0]

Короче, как сделать событие на соприкасновение N объектов сторонами (границами), где N -- кол-во объектов. Допустим, у меня есть Shape1 и Shape2... Shape1 управляется с клавы (стрелки вверх, вниз, вправо, влево). Как сделать так, чтобы, когда Shape1 соприкасалось с Shape2, оно в него упиралось и не шло дальше?

Пробовал описать "столкновение" фигур сверху, снизу и т.п, но больно уж дофига кода получаецца... И это только для двух фигур, а если их будет больше, то и предположить боюсь....


 
ZAROLF ©   (2004-01-20 09:23) [1]

Иклмн.... просто останови Shape1 при столкновении.


 
Hex0DesiMaL ©   (2004-01-20 09:29) [2]

Блин! Я спрашиваю не что сделать, а как описать само столкновение?!


 
nexxiss ©   (2004-01-20 14:07) [3]

type
 TIsColl = record
   Cl: boolean; // признак столкновения
   Rt: TRect; // область пересечения
 end;

.........
.........
.........

function Max(A,B: Integer): Integer;
begin
 if A>B then Result:=A
        else Result:=B;
end;

function Min(A,B: Integer): Integer;
begin
 if A<B then Result:=A
        else Result:=B;
end;

function IsColl( Rect1, Rect2: TRect): TIsColl;
var
 x1,x2,y1,y2: Integer; // координаты верхней левой и нижней правой точки первого прямоугольника
 xx1,xx2,yy1,yy2 : Integer; // координаты верхней левой и нижней правой точки второго прямоугольника
 L,R,T,B: Integer;  // границы области пересечения двух прямоугольников
begin
 x1:=Rect1.Left;
 x2:=Rect1.Right;
 y1:=Rect1.Top;
 y2:=Rect1.Bottom;
 xx1:=Rect2.Left;
 xx2:=Rect2.Right;
 yy1:=Rect2.Top;
 yy2:=Rect2.Bottom;
 Result.Cl:=false;
 Result.Rt:=Rect(0,0,0,0);
 L:=Max(x1,xx1);
 R:=Min(x2,xx2);
 T:=Max(y1,yy1);
 B:=Min(y2,yy2);
 if (L<R) and (T<B) then
   begin
     Result.Cl:=true;
     Result.Rt:=Rect(L,T,R,B);
   end;
end;

Что-то вроде этого. Функция выдает как признак столкновения, так и область пересечения двух прямоугольников.



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
9-1073395130
mixir
2004-01-06 16:18
2004.05.23
Камера &amp; 3D


7-1081694079
Evgeniy_K
2004-04-11 18:34
2004.05.23
Путь к Windows


1-1083847776
pavel_guzhanov
2004-05-06 16:49
2004.05.23
Можно ли обратиться к компоненту на форме по его номеру?


7-1081755929
Katya_mgkit
2004-04-12 11:45
2004.05.23
Служба


1-1084275657
prockrut
2004-05-11 15:40
2004.05.23
Как заставить приложение что-либо делать, когда окно получает фок