Главная страница
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.03 c
11-1070477151
miek
2003-12-03 21:45
2004.05.23
Form.OnPaint


1-1083865549
MAXHO-1
2004-05-06 21:45
2004.05.23
Как можно сделать следующее:


14-1083481434
XIII
2004-05-02 11:03
2004.05.23
Зацените Сайтец http://TIMUR.NeT.RU


1-1084047903
nkoleda
2004-05-09 00:25
2004.05.23
Excel и примечание


14-1083689729
Cerber
2004-05-04 20:55
2004.05.23
Разделение интернета