Важная информация

User Tag List

Показано с 1 по 4 из 4

Тема: Ландшафт произвольной формы (как в worms)

  1. #1
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,435
    Спасибо Благодарностей отдано 
    191
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Ландшафт произвольной формы (как в worms)

    Для одной игрушки пытаюсь подобрать сабжевый алгоритм.

    И так, имеется ланшафт на подобие Worms (на много экранов), поэтому хранить его и маску проходимости нет возможности (много памяти и еще ряд причин).

    Первый вариант, который пришел в голову и был реализован, это описать поверхность (ее периметр) в виде массива x,y координат. Минус этого способа в том, для проверки приходится перебирать весь массив. Для одной точки это еще примлемо, а для нескольких (расположеных в важных местах управляемого обьекта) будут тормоза.

    А ведь нужно не только определить столкновение точки с контуром ланшафта, его еще нужно огибать. Если дискретность движения точки более 1 пикселя то цикл с проверки придется повторять несколько раз, что приведет к еще большим тормозам.

    Кроме ланшафта в игре есть так называемые платформы, толщиной буквально несколько пикселов. Они также могут иметь произвольную форму. Так же некоторые платформы могут являться элеваторами, встав на которые точка (герой) начинает двигаться в определенную сторону.

    Во время огибания поврехности нужно проверять ее угол по отношении к игроку. На картинке 1 показаны возможные ситуации.
    Если угол слишком острый (на него не заехать) то отталкиваемся и едем обратно. Вот только как определить угол наклона отрезка ланшафта?

    Кроме буфера с координатами вижу еще 1 вариант. Разбить поверхность на неболшие отрезки и в буфере хранить не весь ландшафт, а только точки отрезков. При этом коллизии проверяются в 2 этапа. Каждый отрезок как бы вписан в прямоуголник согласно коордианатм его точек, если точка (герой) входит в этот прямоуголник тогда уже проверем точку на принадлежность отрезку. Это вариант в целом быстрее но на в некоторые моменты (если квадраты пересекаются и проиходит проверка на принадлежность отрезку) это вариант может оказаться медленее первого.

    Третий вариант это совмещение первого и второго, но имхо это совсем изврат.

    Хотелось бы услышать ваши варианты решения задачки.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	var2.png 
Просмотров:	366 
Размер:	5.9 Кб 
ID:	5043   Нажмите на изображение для увеличения. 

Название:	angle.png 
Просмотров:	360 
Размер:	3.1 Кб 
ID:	5044  

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ниндзя или гиш?
    Реализация имхо - вектора и коллизии с деревьями 2-3х уровней.

  4. #3
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,435
    Спасибо Благодарностей отдано 
    191
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Ниндзя или гиш?
    Реализация имхо - вектора и коллизии с деревьями 2-3х уровней.
    Ниндзя не видел. А гиш, да можно сравнить с ним.
    А что за деревья, можно поподробнее?

  5. #4
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ниндзя представляет собой ландшафт+платформы+человеч ек с физикой, называлось просто n vX.X как-то.
    А деревья, ну например quadtree(вроде=) ) - пространство бьётся на прямоугольники/квадраты, потом эти мелкие квады объединяются в более крупные и так несколько раз. Для проверки коллизии проверяем принадлежность наших координат одному из этих квадов, потом квадам этого квада и так до конца.
    Это позволяет не просматривать на коллизии всё пространство, проводить определение всего за несколько сравнений , но возникают расходы на деревья-списки квадов.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Worms
    от CityAceE в разделе Игры
    Ответов: 20
    Последнее: 17.07.2008, 11:11
  2. ZX-Worms -= Project Two =-
    от Alex/AT в разделе Игры
    Ответов: 10
    Последнее: 25.03.2005, 11:30

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •