Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
8-5671
__Alx___
2002-11-16 11:49
2003.03.03
LineDDA


1-5582
orion_st
2003-02-19 11:08
2003.03.03
Сверху всех.


3-5467
Uran
2003-02-12 10:21
2003.03.03
Выборка по совпадению первых 10ти символов


8-5676
Alex777
2002-11-16 13:58
2003.03.03
Сравнение 2 рисунков.


14-5782
malkolinge
2003-02-12 11:28
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский