Форум: "Игры";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c