![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TImage [Delphi, Windows]
Elf © (2004-01-06 19:57:00)Подскажите как мне сделать столкновение двух image . Заранее спасибо!
OSokin (2004-04-05 19:43:00) [1]А потом всю эту кучу переменных, 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;
А то просто нудно писать все по восьми переменным.
dRake (2004-01-07 21:36:00) [2]По поводу способа попиксельной проверки, в общих чертах,
нужно сначала найти ту область (прямоугольник) в которой находятся обе картинки (тобишь та область где одна задевает другую),
за тем перебрать все пикселы из этой области, если хоть в одной точке из этой области есть непрозрачные пикселы обеих картинок, то имеем столкновение ;) Код писать не буду, эабыл уже старый добрый 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;
Ну в этом вроде разобраться нетрудно, простите если что не так, писал код с нуля, может где ошибся ;)
Mihey (2004-01-07 15:23:00) [3]Есть такая функция в модуле Graphic, называется IntersectRect. Народ, вы же сами двигаете эти имаджи? Ну так делаете проверку и всё тут.
Thor (2004-01-07 13:05:00) [4]
> Zak3D[@Tm] © (07.01.04 12:13) [4]
дак нужно проверять.
один из способов - попиксельная проверка. другой - проверка столкновения рамок. кажись на mirgames.ru в разделе про DelphiX были описаны методы.
Zak3D[@Tm] (2004-01-07 12:13:00) [5]Млин, у меня такой же вопрос, как сделать, чтобы два Image'а при соприкосновении любыми точками както реагировали, например останавливались, или меняли направление движение, плз подскажите если не трудно, а то без этого никак. ;)
Mihey (2004-01-06 23:18:00) [6]А я это подумал. Очевидно, в вопросе явная недостаточность. Что именно ты хочешь сделать? Как они должны столкнуться?
Elf (2004-01-06 20:26:00) [7]Я не это имел ввиду :(
Mihey (2004-01-06 20:13:00) [8]Направь их навстречу друг к другу.