Главная страница
    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.009 c
3-5401
rom900
2003-02-10 13:42
2003.03.03
Можно ли в DBGrid выделить несколько записей ?


1-5634
Noname15
2003-02-15 16:08
2003.03.03
DateTimePicker


3-5406
cherdn
2003-02-12 15:41
2003.03.03
Почему при потере фокуса с TDBRichEdit, возникает ошибка...


14-5800
VEG
2003-02-12 20:35
2003.03.03
Как правильно написать такой тип:


1-5569
[HDD]John
2003-02-19 14:56
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский