Парсер Хабра: 2. 01. От переводчика: этот пост — перевод одной из частей масштабного обзора физики (Sonic Physics Guide) в играх серии Sonic the Hedgehog для Sega Genesis/Mega Drive и Sonic CD. В следующих частях рассматриваются такие темы: бег, прыжки, вращение, потеря колец, поведение под водой, суперскорость, специальные возможности, камера, анимации и некоторые другие. Так как частей много (1. Стоит ли продолжать — решать вам. Примечание. В статье описываются столкновения и взаимодействия Соника с твердыми тайлами. Твердые объекты, такие как мониторы, подвижные платформы и блоки, имеют собственные процедуры обработки столкновений с Соником, которые не обязательно совпадают с поведением твердых тайлов. Введение. Что такое твердые тайлы? В зонах (уровнях), из которых состоят игры про Соника, очень много твердых объектов, поэтому зона потребовала бы слишком много памяти, если окружение было бы целиком составлено из твердых объектов, каждый из которых занимает 6. RAM. Был сделан умный ход — зона создается из тайлов, поэтому все, что требуется — знать, является ли тайл твердым (непроницаемым), или нет. Возможно, вы знаете, что зоны разбиты на блоки размером 1. Sonic 1 и Sonic CD), которые, в свою очередь, разбиты на тайлы в 1. Вся магия обработки твердых элементов происходит на уровне тайлов 1. Взаимодействие и столкновения Соника с этими твердыми тайлами и образуют базовый движок игры. Они определяют способ работы с полами, стенами, потолками, скатами и петлями. Поскольку это объемная и сложная тема, мой обзор будет отличаться от других руководств по физике игр Sonic, но я постараюсь ограничить рассуждения до минимума. Стояние. Если принять положение земли по оси Y равным $0. E0, то Соник стоит над ней в координате $0. CC. Это на 2. 0 пикселей выше уровня земли. Толкание. Соник должен останавливаться при ударе об стену. Этого можно достичь, проверяя коллизию с линией. Линия коллайдера (от переводчика: здесь и далее в статье используется термин sensor, я выбрал, как мне кажется, адекватный аналог) должна находиться не на его позиции на оси Y, а немного ниже, иначе она «не заметит» короткие шаги. Раннее выталкивание значительно снижает длину прыжка т. Игровой автомат где надо вытолкнуть приз, игровой автомат. Но тех.поддержка, видимо, не настолько коварна, как сами владельцы 'адской машины', и она приехала через 20 мин. Но при детальном осмотре, появляется некое подозрение. Выиграть игровые автоматы Gaminator с помощью телефона нажать на кнопку старт (на игровом автомате) и забрать свой приз. Игровой автомат вытолкнуть приз - игровой автомат где надо. Она также не может быть слишком низко, иначе она «заметит» склоны и кривые, от которых Соник не должен отталкиваться. Достаточным будет ее расположение в координате Y+4 от расположения Соника, потому что обычно не бывает лестниц ниже 1. Насколько широкой должна быть линия коллайдера? Если принять координату X левой стороны стены равной $0. C0, то Соник не должен оказаться ближе $0. B5. Если принять координату X правой стороны стены равной $0. F, то Соник не должен оказаться ближе $0. A. Это составляет разницу в 1. Поэтому линия коллайдера должна иметь ширину 2. X- 1. 0 до X+1. 0 Соника. При каждом обнаружении твердого тайла Соник должен «выталкиваться» установкой координаты тайла минус (или плюс) 1. При этом будет зарегистрирована постоянная коллизия, и он прилипнет к стене.)Так как граница тайла минус положение Соника должно равняться 1. Соника и границей тайла есть всего 1. Одиннадцатый пиксель от Соника будет уже самой границей тайла. Поэтому Соник в действительности имеет ширину 2. Падение. Соник должен иметь возможность сбегать с площадок. Он не может вести себя как койот Wile E. Coyote из мультфильмов, не замечающий, что под ним ничего нет. Это означает, что Соник также должен проверять наличие под ним твердых тайлов. Этого можно достичь, добавив еще две линии коллайдеров, направленных вниз. Один (A) должен быть с левой стороны Соника, в координате X- 9. Другой (B) — с правой стороны, в X+9. Они должны начинаться с его положения по оси Y и опускаться не менее чем на 1. Y+2. 0 (но не слишком низко, или он будет сваливаться при спуске с низких ступенек или лестниц, чего бы нам не хотелось). Если коллайдеры A и B не обнаруживают твердых тайлов, Соник «падает» — устанавливается флаг, сообщающий движку, что он находится в воздухе. Мы помним, что при столкновении со стенами Соник имеет ширину 2. Однако коллайдеры обнаружения земли находятся всего в 1. Получается, что Соник «худее» на 2 пикселя при сбегании с площадок, чем при ударах о стены. Балансирование на краю. Хорошая деталь — Соник переходит в анимацию балансирования, находясь близко к краю площадки. Это случается, только когда он остановился (его скорость движения по земле равна 0). Откуда об этом узнает движок? Все просто — в момент, когда активен только один из коллайдеров, Соник находится на краю. Если A активен, а B — нет, то площадка находится справа от него. В противном случае площадка слева. Однако если Соник начнет балансировать, сразу же, как только один из коллайдеров ничего не обнаружит, он начнет балансировать «рано», и это будет выглядеть глупо. Поэтому это случается, когда активен только один коллайдер, и его положение по оси X больше, чем граница твердого тайла, обнаруженного активным коллайдером. Если принять координату правого края площадки равной $0. A5. F, Соник начнет балансировать только в $0. A6. 0. Он упадет в точке $0. A6. 9, когда оба коллайдера ничего не обнаружат. В Sonic 2 and Sonic CD если площадка находится в противоположном от взгляда Соника направлении, то включается вторая анимация балансирования. В Sonic 2, Sonic 3 и Sonic & Knuckles Соник имеет третью анимацию балансирования, когда он еще ближе к краю площадки. С учетом установленных выше значений, она включается, когда он в координате $0. A6. 6. Примечание: при балансировании некоторые возможности недоступны (прижимание к земле, смотрение вверх, вращение и т. В Sonic 3 & Knuckles игрок может прижиматься к земле и вращаться (но не смотреть вверх) при балансировании на земле, но не при балансировании на объекте. Скаты и кривые. Sonic the Hedgehog стала одной из первых игр, использующих кривые поверхности и петли с оборотом на 3. В большинстве игр той эры окружение полностью создавалось из блоков (и иногда из склонов). Возможность работы с плавно изменяющими форму объектами — это один из фундаментальных аспектов новизны и привлекательности игр про Соника. К сожалению, это, наверно, самый сложный для воссоздания в фанатских играх аспект. Как же он работает? Маски высот. При каждом обнаружении коллайдерами A или B твердого тайла они возвращают высоту этого тайла. Как находится высота тайла? Каждый тайл имеет ассоциированное с ним значение, привязанное к маске, хранящейся в памяти. Маска — это простой массив из 1. Например, эта маска высот имеет массив высот $0. E8. Какое используется значение массива высот? Вычитаем положение X тайла из положения X коллайдера. Результат будет используемым индексом массива высот. Если найденное значение высоты равно $1. Какой бы коллайдер ни обнаружил самую большую высоту, координата Y Соника устанавливается равной этой высоте минус 2. Его угол также устанавливается равным углу твердого тайла, вернувшего самую большую высоту. Если коллайдер не обнаружил твердый тайл, по умолчанию возвращается уровень ног (Y+2. Ошибки при использовании этого метода. К сожалению, из- за использования этого метода в оригинальном движке есть пара раздражающих багов. Если Соник стоит на наклонном площадке, один из коллайдеров не обнаружит тайл, и вернет высоту уровня ног. Это приводит к тому, что Соник стоит в неправильном положении. Соник поднимается вместе с коллайдером B при перемещении вправо. Когда B «падает» с площадки, Соник по умолчанию перемещается на уровень коллайдера A. Затем он поднимается вместе с коллайдером A при дальнейшем движении вправо. Поэтому он сначала будет подниматься, падать и снова подниматься при сбегании с площадки. Есть всего несколько областей, в которых это заметно, но такой баг присутствует во всех частях игры для Genesis/Mega Drive, и это выглядит довольно неаккуратно. Второй баг возникает в случае наличия двух тайлов противоположных склонов одного над другим, таких как низкие холмы на уровнях Green Hill Zone и Marble Zone. Коллайдер B начинает спускаться со склона вправо, но Соник все еще по умолчанию ориентируется на уровень предыдущего склона, обнаруженного коллайдером A. Поскольку такие склоны довольно невысокие, это приводит к опусканию Соника в середине примерно на 1 пиксель. Но это еще не все. Соник получает данные об угле от самого высоко расположенного коллайдера, поэтому даже если похоже, что он должен быть под углом склона справа (потому что он ближе к нему), он по- прежнему будет иметь угол склона слева. При прыжке он будет прыгать под этим углом, двигаясь назад, а не вперед, как ожидается. Перемещение под углами. Все это очень хорошо и замечательно — Соник плавно движется по поверхности с различными высотами. Однако движку нужно сделать еще кое- что. Для реалистичности скорость Соника должна снижаться на поверхностях под углом. Существует два способа, которыми углы могут влиять на скорость Соника. Первый гарантирует, что он не пробегает по холму за то же время, что и по плоской земле той же ширины. Второй замедляет его при движении вверх по холму и ускоряет его при движении вниз. Давайте рассмотрим каждый из них по очереди. Три переменных скорости. Если бы Соник был обычным платформером, использующим только блоки, для него понадобились бы только две переменные скорости: движение по оси X (Xsp) и по оси Y (Ysp), горизонтальная и вертикальная составляющие скорости Соника. Ускорение (acc), замедление (dec) и трение (frc) добавляются к Xsp; скорость прыжка (jmp) и гравитация (grv) добавляются к Ysp (когда Соник находится в воздухе). Однако при использовании скатов, когда Соник движется по скату, он одновременно перемещается горизонтально и вертикально. Это означает, что и Xsp, и Ysp имеют ненулевые значения. Простое добавление acc, dec или frc к Xsp больше не работает; представьте, что Соник пытается бежать вверх по стене — прибавление к горизонтальной скорости будет бесполезным, ведь он пытается двигаться вверх. Хитрость заключается в задействовании третьей переменной скорости (что и делает оригинальный движок), назовем ее скоростью перемещения по земле (Gsp). Это скорость Соника вдоль земли вне зависимости от угла. Значения acc, dec и frc прибавляются к Gsp, а не к Xsp или Ysp.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
January 2017
Categories |