Как было обнаружено столкновение в «Легенде о Зельде»: ссылка на прошлое?

Я хотел бы знать, как было обнаружено обнаружение столкновений в Легенда о Зельде: ссылка на прошлое.

Игра основана на 16x16 плитке, так как они сделали плитки, где занята только четверть или половина плитки? Использовали ли они меньшую сетку для обнаружения столкновений, например, 8x8 плиток, поэтому четыре из них делают один 16x16 плитку текстурной сетки?

Но тогда они также имеют истинную половину плитки, которые по диагонали вырезаны и углы плиток кажутся круглыми или чем-то. Если ссылка идет в угол плитки, он может продолжать ходить и автоматически перемещается по ее углу. Как это делается?

Я надеюсь, что кто-то может помочь мне здесь.

введите описание изображения здесь

168 голосов | спросил Restart 9 FebruaryEurope/MoscowbWed, 09 Feb 2011 18:20:09 +0300000000pmWed, 09 Feb 2011 18:20:09 +030011 2011, 18:20:09

7 ответов


80

Учитывая ограничения памяти SNES, решение должно быть очень простым.

Я предполагаю, что у них есть еще одна сетка 16 * 16, которая рассказывает вам, как обрабатывать столкновение в плитке. Плитка может быть:

  • Empty
  • Полный (т. е. столкновение с квадратным блоком)
  • Half-full-1 (диагональ слева направо и внизу справа)
  • Half-full-2 (диагональное совпадение справа налево и внизу слева)

Итак, когда Link движется, игровой движок проверяет окружающие плитки и применяет для них логику столкновений в соответствии с сеткой столкновений.

Конечно, я не разбирал источники Zelda, я просто говорю, как я это сделаю.

И «округлость» углов - это просто иллюзия - какой-то специальный код, написанный, чтобы заставить их чувствовать себя так. Разработчики делали это со времен лет Pac-Man .

Как вы видите, хотя топография лабиринта и черепичная, и супер простая (только квадраты), технику, такую ​​как плавный поворот, можно моделировать, создавая оптическую иллюзию (квадратные плитки с круглыми текстурами) и некоторый умный код (начиная с поверните его до конца плитки).

ответил x10 9 FebruaryEurope/MoscowbWed, 09 Feb 2011 18:34:58 +0300000000pmWed, 09 Feb 2011 18:34:58 +030011 2011, 18:34:58
88

Вот как это делается :

[ПРИМЕЧАНИЕ: у меня есть обратная конструкция этой игры]

Для обнаружения столкновений на данном экране в Overworld смещения точки доступа Link используются для расчета того блока 32x32, который он занимает. Каждый блок определяется четырьмя блоками 16x16. Аналогично, каждое смещение точки доступа далее делится, чтобы определить, какой из этих блоков 16x16 занимает каждая точка доступа.

Каждый блок 16x16 содержит 8x8 блоков, которые ссылаются на фактические графические ячейки в VRAM. Существует ссылочная таблица, которая отображает каждый доступный блок 8x8 в тип столкновения. Тип столкновения представляет собой однобайтовое значение, которое определяет и то, как обрабатывать столкновение с плиткой (остановить движение, разрешить прыжок вниз, разрешить подъем, лестницу и т. Д.). Этот байт также определяет, какая часть плитки проходит. Для определения каждой формы используется простая карта высоты. Карта высоты определяет единую одностороннюю сплошную область как 8 байт от 0 до 8. Хотя она не эффективна в пространстве, она эффективна с точки зрения скорости.

Таким образом, столкновение обрабатывается на уровне ячеек 8x8, где каждая ячейка 8x8 имеет тип и форму столкновения, определенные для нее, которая соответствует ее проходящей области и действиям, которые могут быть приняты на ней. Коллизионные формы обрабатываются с помощью простых карт многократного использования 8 байтов.

ответил James 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 07 Sep 2012 09:04:25 +0400 2012, 09:04:25
39

Я действительно знаю это. Это обычное явление во всех играх SNES.

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

ответил Bryan Elliott 9 FebruaryEurope/MoscowbWed, 09 Feb 2011 23:12:44 +0300000000pmWed, 09 Feb 2011 23:12:44 +030011 2011, 23:12:44
5

Сетка карты имеет большие (по-видимому, 16x16 пикселей) элементы, возможно, так, что она может эффективно храниться на ограниченных ROM-картах SNES /Super Famicom путем повторного использования плит. Но если вы внимательно наблюдаете за игрой, вы заметите, что спрайты перемещаются по гораздо более мелкозернистой сетке. (Попытайтесь высунуть свой меч и обратите внимание, что противник может удариться в него и попасть в него, даже когда он находится на границе двух плиток.) ​​Это было уже верно в оригинальной легенде Zelda.

ответил 9 FebruaryEurope/MoscowbWed, 09 Feb 2011 18:28:54 +0300000000pmWed, 09 Feb 2011 18:28:54 +030011 2011, 18:28:54
1

Предлагаем сделать обнаружение столкновений на основе пикселей:

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

Если это так: выполните проверку для каждого не альфа-пикселя спрайта 1, чтобы увидеть, разделяет ли он одну и ту же (X, Y) координату экрана с любым другим не альфа-пикселом от сталкивающегося спрайта Б.

ответил 10 FebruaryEurope/MoscowbThu, 10 Feb 2011 00:55:39 +0300000000amThu, 10 Feb 2011 00:55:39 +030011 2011, 00:55:39
1

Более быстрый метод обнаружения столкновения будет заключаться в обнаружении столкновения аппаратных элементов на пиксель. Я уверен, что графический чип SNES может обнаруживать однопиксельное столкновение между любыми спрайтами, такими как старые 8-битные консоли. Таким образом, эффективным методом было бы создание спрайта, чтобы он выглядел как плитка (ы). Ссылка движется в направлении и проверяет столкновение спрайтов, обнаруженное графическим чипом. Недостатком этого метода является то, что SNES не имеет бесконечных спрайтов. Но это было бы очень быстрое обнаружение столкновений в пикселях.

ответил a_guest 8 J0000006Europe/Moscow 2013, 12:17:41
1

Вероятно, столкновение было определено в блоках 8x8 - каждая плита 16x16, содержащая 4 таких блока. Блоки могут иметь выбираемые фигуры, кроме «всех не сплошных» и «всех твердых», таких как диагональ и «может спрыгнуть с», чтобы реализовать уступы со всех восьми направлений. Игра, конечно же, поддерживала отдельный невидимый слой для столкновений, вместо того, чтобы делать любое идеальное столкновение с пикселями - у SNES были аппаратные условия no для спрайтовых столкновений, кроме того, что он определенно слишком для его процессора ~ 3 МГц .

ответил Roger Levy 11 J0000006Europe/Moscow 2013, 22:15:49

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132