![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Вот функция столкновения
Код:
Function CollisionpnlStena(var Pers:TImage; var brImage2:TPanel):Boolean; var val:boolean; begin With pers do begin if brImage2 <> nil then begin val:=((brImage2.Left >= Left) and (brImage2.Top >= Top) and (brImage2.Left <= Left+Width) and (brImage2.Top <= Top+Height)) or (( brImage2.Left+brImage2.Width >= Left) and (brImage2.Top+brImage2.Height >= Top) and ( brImage2.Left+brImage2.Width <= Left+Width) and (brImage2.Top+brImage2.Height <= Top+Height)) or ((brImage2.Left >= Left) and (brImage2.Top+brImage2.Height >= Top) and (brImage2.Left <= Left+Width) and (brImage2.Top+brImage2.Height <= Top+Height)) or ((brImage2.Left+brImage2.Width >= Left) and (brImage2.Top >= Top) and (brImage2.Left+brImage2.Width <= Left+Width) and (brImage2.Top <= Top+Height)); if PPLRUD = 1 then Pers.Left:=brImage2.Left+brImage2.Width else if PPLRUD = 2 then Pers.Left:=brImage2.Left-Pers.Width else if PPLRUD = 3 then Pers.Top:=brImage2.Top+brImage2.Height else if PPLRUD = 4 then Pers.Top:=brImage2.Top-Pers.Height; end; result:=val; end; end; PPLRUD Содержит в какую сторону движется персонаж или какие действия с ним происходят. Вот создания панелей в качестве стен Код:
setlength(Stens, 2); stens[0]:=TPanel.Create(ScrollBox1); stens[0].Parent:=ScrollBox1; stens[0].Left:=190; stens[0].Width:=26; stens[0].Top:=0; stens[0].Height:=241; stens[0].Name:='pnlstens_0'; stens[1]:=TPanel.Create(ScrollBox1); stens[1].Parent:=ScrollBox1; stens[1].Left:=405; stens[1].Width:=26; stens[1].Top:=0; stens[1].Height:=241; stens[1].Name:='pnlstens_1'; Код:
procedure TFormMain.ZEPEMEWEHNE_PERSONAGESTimer(Sender: TObject); var i:integer; begin ZEPEMEWEHNE_PERSONAGES.Enabled:=FALSE; if PPLRUD=1 then begin Personages.Left:=Personages.Left-1; end else if PPLRUD=2 then begin Personages.Left:=Personages.Left+1; end else if PPLRUD=3 then begin Personages.Top:=Personages.Top-1; end else if PPLRUD=4 then begin Personages.Top:=Personages.Top+1; end; if Length(stens) > 0 then for i:= 0 to length(stens)-1 do if CollisionpnlStena(Personages, stens[i]) then PPLRUD:=0; ZEPEMEWEHNE_PERSONAGES.Enabled:=True; end; |
#2
|
||||
|
||||
![]() Похоже что CollisionpnlStena возвращает всегда истину поскольку в условиях сравнения наблюдаются вероятно повторяющиеся, накладывающиеся друг-на-друга параметры - где-то пары скобок не хватает, к сожалению без проверки точнее не видно
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
||||
|
||||
![]() Есть более простой способ вычислить столкновение прямоугольников:
Код:
Var R: TRect; ... if IntersectRect(R, Image1.BoundsRect, Image2.BoundsRect) then ShowMessage('Collision') Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
|||
|
|||
![]() для имаджей это столкновение работает для панелей нет
|
#5
|
||||
|
||||
![]() Это еще почему? Прямоугольник что в него ни запихай, форму от этого не изменит.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
![]() Цитата:
|