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

Вниз

TImage   Найти похожие ветки 

 
Elf ©   (2004-01-06 19:57) [0]

Подскажите как мне сделать столкновение двух image . Заранее спасибо!


 
Mihey ©   (2004-01-06 20:13) [1]

Направь их навстречу друг к другу.


 
Elf ©   (2004-01-06 20:26) [2]

Я не это имел ввиду :(


 
Mihey ©   (2004-01-06 23:18) [3]

А я это подумал. Очевидно, в вопросе явная недостаточность. Что именно ты хочешь сделать? Как они должны столкнуться?


 
Zak3D[@Tm] ©   (2004-01-07 12:13) [4]

Млин, у меня такой же вопрос, как сделать, чтобы два Image"а при соприкосновении любыми точками както реагировали, например останавливались, или меняли направление движение, плз подскажите если не трудно, а то без этого никак. ;)


 
Thor ©   (2004-01-07 13:05) [5]


> Zak3D[@Tm] ©   (07.01.04 12:13) [4]

дак нужно проверять.
один из способов - попиксельная проверка. другой - проверка столкновения рамок. кажись на mirgames.ru в разделе про DelphiX были описаны методы.


 
Mihey ©   (2004-01-07 15:23) [6]

Есть такая функция в модуле Graphic, называется IntersectRect. Народ, вы же сами двигаете эти имаджи? Ну так делаете проверку и всё тут.


 
dRake ©   (2004-01-07 21:36) [7]

По поводу способа попиксельной проверки, в общих чертах,
нужно сначала найти ту область (прямоугольник) в которой находятся обе картинки (тобишь та область где одна задевает другую),
за тем перебрать все пикселы из этой области, если хоть в одной точке из этой области есть непрозрачные пикселы обеих картинок, то  имеем столкновение ;) Код писать не буду, эабыл уже старый добрый GDI :))

Способ номер 2 - тут проще, просто надо определить есть ли такая область вообще... Привожу код для 2-х прямоугольников,
x1, y2, x2, y2 : координаты левого верхнего угла,
h1, w1, h2, w2 : их ширины и высоты



function isCollision(x1, x2, w1, h1, x2, y2, w2, h2 : integer) : boolean;

var Collision : boolean;
begin

collision := false;

if (  ((x1 + w1 >= x2) and (x1 < x2)) or
     ((x1 <= x2 + w2) and (x1 > x2))  ) and
  (  ((y1 + h1 >= y2) and (y1 < y2)) or
     ((y1 <= y2 + h2) and (y1 > y2))  ) then Collision := true;

Result := collision;

end;



Ну в этом вроде разобраться нетрудно, простите если что не так, писал код с нуля, может где ошибся ;)


 
OSokin   (2004-04-05 19:43) [8]

А потом всю эту кучу переменных, Elf, можно просто перенести в var, а вместо них просто сделать потомков TImage:



function isCollision(I1,I2:TImage) : boolean;

var
 Collision : boolean;
 x1, x1, w1, h1, x2, y2, w2, h2 : integer
begin

collision := false;

x1:=I1.Left;
y1:=I1.Top;
w1:=I1.Width;
h1:=I1.Height;
x2:=I2.Left;
y2:=I2.Top;
w2:=I2.Width;
h2:=I2.Height;

if (  ((x1 + w1 >= x2) and (x1 < x2)) or
    ((x1 <= x2 + w2) and (x1 > x2))  ) and
 (  ((y1 + h1 >= y2) and (y1 < y2)) or
    ((y1 <= y2 + h2) and (y1 > y2))  ) then Collision := true;

Result := collision;

end;


А то просто нудно писать все по восьми переменным.



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

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

Наверх




Память: 0.48 MB
Время: 0.046 c
4-1086406157
menart
2004-06-05 07:29
2004.07.18
SSPI


1-1088854897
ZedeS
2004-07-03 15:41
2004.07.18
Работа со String переменными


1-1088691685
r0bert
2004-07-01 18:21
2004.07.18
как мне сваратить это с картинкой


1-1088631701
HF-Trade
2004-07-01 01:41
2004.07.18
Скролинг


14-1088655521
skiFF
2004-07-01 08:18
2004.07.18
а теперь про кодэки