Форум: "Игры";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
ВнизТочные коллизии спрайтов Найти похожие ветки
← →
Олег (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.065 c