Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Епрст.... [Delphi, Windows]


Hex0DesiMaL ©   (2004-01-20 09:08:00) 

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

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


nexxiss   (2004-01-20 14:07:00) [1]

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;

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


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

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


ZAROLF   (2004-01-20 09:23:00) [3]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо