Главная страница
    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.065 c
1-1088963569
Igit
2004-07-04 21:52
2004.07.18
Обрезать файл в начале


14-1088587668
Amit
2004-06-30 13:27
2004.07.18
Вот блин, люди вы даёте >:-(


1-1088765574
ssk
2004-07-02 14:52
2004.07.18
Доступ к свойствам объектов в FastReport


6-1084810197
xman
2004-05-17 20:09
2004.07.18
Sockets


1-1088859661
CyberSpy
2004-07-03 17:01
2004.07.18
Listview





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