Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.11.2006, 17:18
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию Столкновение

//Кто нибудь знает более рациональный способ проверки столкновения
Image'ов?

Var
Direction:integer;

//Здесь есть глобальная переменная Direction, отвечающая за направление движения (8-вверх, 2-вниз, 4-влево, 6-вправо)

function TForm1.Collision(Image:TImage):string;
var
i:integer;
begin
for i:=0 to ComponentCount-1 do begin
if (Components[i] is TImage) and (TImage(Components[i]).Name<>image.Name) then begin
if (Image.Left+image.Width>TImage(Components[i]).Left) and (Image.Left<TImage(Components[i]).Left+TImage(Components[i]).Width) and (Image.Top+image.Height>TImage(Components[i]).Top) and (Image.Top<TImage(Components[i]).Top+TImage(Components[i]).Height) and (Direction=6) then begin
image.Left:=TImage(Components[i]).Left-image.Width;
result:=TImage(Components[i]).Name;
exit;
end;
if (Image.Left<TImage(Components[i]).Left+TImage(Components[i]).Width) and (Image.Left+image1.Width>TImage(Components[i]).Left) and (Image.Top+image.Height>TImage(Components[i]).Top) and (Image.Top<TImage(Components[i]).Top+TImage(Components[i]).Height) and (Direction=4) then begin
image.Left:=TImage(Components[i]).Left+TImage(Components[i]).Width;
result:=TImage(Components[i]).Name;
exit;
end;
if (Image.top+image.Height>TImage(Components[i]).Top) and (Image.top<TImage(Components[i]).top+TImage(Components[i]).Height) and (Image.left+image.Width>TImage(Components[i]).left) and (Image.left<TImage(Components[i]).Left+TImage(Components[i]).Width) and (Direction=2) then begin
image.Top:=TImage(Components[i]).top-image.Height;
result:=TImage(Components[i]).Name;
exit;
end;
if (Image.top<TImage(Components[i]).top+TImage(Components[i]).Height) and (Image.top+image1.Height>TImage(Components[i]).top) and (Image.left+image.Width>TImage(Components[i]).left) and (Image.left<TImage(Components[i]).left+TImage(Components[i]).Width) and (Direction=8) then begin
image.top:=TImage(Components[i]).top+TImage(Components[i]).Height;
result:=TImage(Components[i]).Name;
exit;
end;
result:='None';
end;
end;
end;
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter