Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.124 c
9-1080827916
Poooz
2004-04-01 17:58
2004.07.18
Ваше мнение о Blitz Basic


1-1088639295
NightDevil
2004-07-01 03:48
2004.07.18
Изображение в TMEMO


1-1089141500
CyBeR
2004-07-06 23:18
2004.07.18
Как проверить открыта ли форма???


3-1087887417
SJ-79
2004-06-22 10:56
2004.07.18
Использование 2-х версий BDE на одном компе одновременно.


8-1083120022
zsv
2004-04-28 06:40
2004.07.18
Звук





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