Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.03;
Скачать: CL | DM;

Вниз

Столкновения   Найти похожие ветки 

 
greenrul ©   (2002-09-26 19:03) [0]

Обычная обработка столкновений в 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 (и юнит анимированный), то стандартными методами даже не получается...


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

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


 
Mirovodin ©   (2002-09-27 10:43) [2]

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


 
greenrul ©   (2002-09-27 19:51) [3]

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

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


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


 
greenrul ©   (2002-09-27 20:34) [4]

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.03.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
1-5564
alkmas
2003-02-19 13:08
2003.03.03
Внедрение компонента в другой компонент


1-5513
Lamak
2003-02-20 20:55
2003.03.03
Вопрос про размер exe-файла.


1-5527
Checist [root]
2003-02-21 11:02
2003.03.03
Отображение текста в Memo


4-5921
Vox
2003-01-16 23:55
2003.03.03
Inter Process Communication


1-5615
Ozone
2003-02-20 09:51
2003.03.03
Создание компонентов в run-time