Текущий архив: 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.45 MB
Время: 0.046 c