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

Вниз

Точные коллизии спрайтов   Найти похожие ветки 

 
Олег   (2004-03-30 01:35) [0]

Есть спрайт, который должны падать, если он не находится на другом спрайте. У него есть переменная, которую при обработке (в игровом лупе) я увеличиваю, а затем вычитаю из Y координаты спрайта - это и есть падение. Вот такая у меня созрела проблема: при большом значении этой переменной спрайт пролетает сквозь другие маленькие спрайты. Как сделать нормальную проверку столкновений? Была идея попиксельно проверять наличие спрайтов по Y координате между прежней и новой позициями, но ведь это медленно. Не подскажете, есть ли какой алгоритм?


 
Thor ©   (2004-03-30 01:41) [1]

а код будут телепаты ((с) - не мое) узнавать?


 
Олег   (2004-03-30 02:05) [2]

А зачем здесь код? Все уже сказано. Что то вроде этого:

procedure Proccess;
 ...
 For i:=0 To Sprites-1 Do begin
   ...
     With Sprite(i) Do begin
       Delta:=Delta+0.2;
       Y:=Y-Delta;
     end;
   ...
 end;
 ...
end;


Ничего интересного. Мне вот что важно: когда Delta будет например 30, а Y спрайта 500, то 500 - 30 = 470. И если там окажется спрайт высотой в 20 пикс. на координате 495, то тот спрайт, который сейчас падает, просто пролетит мимо, не столкнувшись


 
Thor ©   (2004-03-30 02:35) [3]

либо я тупой, либо у тебя русский как у меня китайский.
по нормальному объясни, что тебе нужно?
просто посчитать коллизию спрайтов или как?
я из-за странных окончаний первого поста не совсем понимаю задумку.
что значит

> У него есть переменная, которую при обработке (в игровом
> лупе) я увеличиваю, а затем вычитаю из Y координаты спрайта
> - это и есть падение


???
что-то типа положения спрайта игрока на карте?
т.е. если игрок находится на уровне земли, потом прыгает, потом встает на другой уровень и т.п. что ли?
давай говорить предметно, а то фигня получается.


 
Олег   (2004-03-30 03:11) [4]

Например игрко спрыгнул с земли, я проверяю коллизию - ее нет, значит увеличиваю Дельту, вычитаю ее из вертикального положения игрока. Игрок летит вниз, набирая скорость. И допустим Дельта накопилась на 100. Значит при след. обработке и спущу игрока на 100 пискелей. А вдруг между текущей поз. и следующей не будет пусто? Если где то посередине будет палка высотой в 20 пикселей, на которрую можно встать? Если я сразу спущу игрока на 100 пекс, то пролечу сквозь палку. Надо мне как то проверять наличие палок в воздухе :) Если делать чтото вроде for i:=CurrentPos to CurrentPos+Delta do CheckCollision, то для каждого пикселя (по вертикали) придется искать столкновения, а это медленно, ведь спрайтов в игре полно, и все нужно таким образом проверять


 
cyborg ©   (2004-03-30 10:23) [5]


> когда Delta будет например 30, а Y спрайта 500, то 500 -
> 30 = 470.

Проверяй столкновение Delta раз прибавляя по одному пикселю смещение.


 
Олег   (2004-03-31 02:07) [6]

cyborg
Я ж в последнем сообщ. написал что так и делаю, прочти


 
cyborg ©   (2004-03-31 10:31) [7]

А ты не почти так делай, а так, и пропусков не будет.

Например за ход тебе нужно сдвинуть вниз на 20 пикселей, за один кадр делаешь проверку 20 раз, смещая спрайт на пиксель вниз за проход.



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

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

Наверх




Память: 0.48 MB
Время: 0.024 c
1-1088963569
Igit
2004-07-04 21:52
2004.07.18
Обрезать файл в начале


1-1088682421
Koba
2004-07-01 15:47
2004.07.18
Install


3-1087551984
SergBlack
2004-06-18 13:46
2004.07.18
Как создать автоинкрементное поле в таблице FireBird


1-1088421856
Ky3bka
2004-06-28 15:24
2004.07.18
Алгоритм оптимального разреза пиломатериалов


1-1088291086
killer
2004-06-27 03:04
2004.07.18
Как передать TGraphic из DLL в программу