Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
1-1089032420
мыш
2004-07-05 17:00
2004.07.18
{$R WindowsXPTheme.res} запрещает раскраску тулбара


1-1089003921
ALEIIIKA
2004-07-05 09:05
2004.07.18
Компиляция программы


1-1089107532
bak
2004-07-06 13:52
2004.07.18
узлы TTreeView


14-1088597348
panov
2004-06-30 16:09
2004.07.18
Еще одного спамера подцепил на дозвон.


1-1088859710
Navi
2004-07-03 17:01
2004.07.18
Размеры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский