Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Столкновения [Delphi, Windows]


greenrul ©   (2002-09-26 19:03:00) 

Обычная обработка столкновений в DelphiX меня не устроила и решил "свой" метод сделать. Но не обошлось без ошибок:

В игре есть юнит, на которого по таймеру действует гравитация. Внизу есть земля, неправильной формы. План был таков - встречаясь с землей (столкновение), процедуре передается координата юнита по иксу, процедура же выдает границу земли в этом районе, и юнит на нее перемещается:

procedure TPlayer.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TImageSprite then Player1.y:=GetAbleCoord(Round(Player1.x))-Player1.Height;
end;

function GetAbleCoord(x:integer):integer;
var i:TColor;i2:integer;a:TBitmap;
begin
a:=TBitmap.Create;
a:=MainForm.DXImageList1.Items.Find("map").Picture.Bitmap;
i2:=a.Height;
repeat
i:=a.Canvas.Pixels[x,i2];
Dec(i2);
until i=clWhite;
GetAbleCoord:=i2;
end;



Только вот юнит улетал в y=0...


может свой метод подскажете? а то даже если у обоих тел PixelCheck=true (и юнит анимированный), то стандартными методами даже не получается...


greenrul   (2002-09-27 20:34:00) [1]

Пример заработал, я там с картинкой наглючил - прошу прощенья.

Появился новый вопрос - если первый спрайт анимирован, а первый и второй прозрачны, и pixelCheck=true, то коллизии упрямо считаются намного позже самого столкновения... ЧТО ДЕЛАТЬ?


greenrul   (2002-09-27 19:51:00) [2]

2Sapersky_ : Все так сделал, всеравно не помогло =(
p.s. (метод не особо медленный)

А у Краснова немного другая цель в это примере


кто чего предложит?


Mirovodin   (2002-09-27 10:43:00) [3]

Столкновения в DelphiX работают не точно, это касательно по пиксельного. Хороший метод контроля столкновения 2-х поверхностей рассмотрен в книге М. Краснова "... DirectX". Там написана специальная функция для проверки столкновения 2-х Surface"в. Рекомендую пользоваться именно ей.


Sapersky_   (2002-09-27 00:28:00) [4]

1) a:=TBitmap.Create не надо.
2) Возможно, начинать нужно не с a.Height, а c a.Height-1.
3) А фон точно clWhite?
4) Сам метод довольно кривой (и медленный). Не лучше ли заранее сгенерировать на базе картинки "map" массив высот и просто проверять - больше/меньше.


Наверх

Титульная страница Поиск, карта сайта Написать письмо