Главная страница
    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.45 MB
Время: 0.008 c
3-5383
denis24
2003-02-12 10:38
2003.03.03
создание бд


6-5687
Oxy
2003-01-13 15:23
2003.03.03
Как создать подключение без диалога?


1-5616
Zn
2003-02-20 09:57
2003.03.03
Отображение текста в StatusBar - нет на других машинах.


1-5478
lightix
2003-02-19 10:12
2003.03.03
Как удалить строку из StringGrid ?


14-5812
ААААА...
2003-02-13 03:58
2003.03.03
ОООО...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский