Как определить, попал ли персонаж в пропасть в бесконечном бегуне / прыгуне?


12

Я строю 2D бесконечный бегун. В игре персонаж прыгает от столба к столбу, и столбы генерируются случайным образом. У меня это работает. Но как определить, попал ли персонаж в столб и упал ли он в пропасть между столбами? Столб обыкновенный прямоугольной формы.


OT: Я думал, что этот вопрос был опубликован на rpg.SE, и я подумал: «Какой тип правила был обнаружен сейчас?
о0 '.

Ответы:


20

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


1
И сделать этот прямоугольник дочерним элементом камеры, чтобы он двигался вместе с камерой и присутствовал всегда? Это так просто. Благодарю.
SanSolo

Даже если игрок не сможет пройти уровень, я думаю, что это хорошая гарантия, если он каким-то образом справится.
Мукахо

5
Если вы буквально проверяете пересечение, убедитесь, что ваш персонаж не может упасть так быстро, чтобы пробиться сквозь поверхность (т. Е. Один из персонажа полностью выше, а следующий кадр полностью ниже).
wchargin

2
Да, прямоугольник должен расширяться как можно ниже, чтобы избежать этого. Также будет работать только проверка высоты, но это дает вам гибкость изменения размера «области уничтожения» в зависимости от уровня.
mklingen

6
Чтобы избежать «отсечения» через прямоугольник, почему бы не просто if (playerPos.x < minHeight)?
Коул Джонсон

24

Если ваша игра прокручивается только по горизонтали, вы можете проверить, находится ли вертикальная позиция персонажа ниже нижнего края сцены.

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

Как правило, условие смерти - если персонаж не может оставаться «в камере». Управляя движением камеры, вы сможете настроить свой игровой процесс. Например, если на этапе вертикальной прокрутки вы позволяете камере «резиново» лишь немного опускаться, а при полном движении вверх вы будете наказывать за глубокие, неэкранные падения.


Да, это тоже простой способ. Мне просто нужно выяснить самое низкое положение. Что персонаж может быть.
СанСоло

1
Верный! в случае горизонтальной прокрутки вы можете просто проверить вертикальный размер сцены в редакторе карт. В случае вертикальной прокрутки вы можете убедиться, что камера движется только вверх. Таким образом, если персонаж падает, он окажется ниже поля зрения камеры. Затем вы можете просто проверить, находится ли вертикальная позиция персонажа ниже нижней границы представления.
Желе ван Кампен

@JellevanCampen: Вы не должны обязательно ограничивать движение камеры вверх. Вы можете убивать персонажей, которые не могут оставаться «в камере», или заставить камеру следовать за ними.
Утка

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

2
@Kevin: я согласен на общие игры, но не на процедурно генерируемые бесконечные скроллеры. Например, в вертикальных скроллерах вы должны будете либо продолжать порождать новые ящики и убирать закадровые ящики, либо вам придется обновлять ящики по мере движения камеры. Поскольку условие смерти напрямую связано с «неспособностью оставаться в камере», имеет смысл привязать условие к камере. Кроме того, более эффективно выполнять проверку границ камеры, а не создавать новые объекты и прибегать к проверке столкновений.
Желе ван Кампен

2

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

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


1

Если у вас есть высота столбов, вы можете найти самый низкий из существующих и сравнить его с вертикальным положением игрока. Если он ниже нижней колонны, нет никаких шансов, что он сможет вернуться. Вы можете ограничить эту проверку только колоннами позади и перед игроком.

Пример: у нас есть 3 колонны высотой [10, 20, 40]. Игрок прыгнул на столб с высотой 40, он прыгает вперед на 20. Он чувствовал разрыв между 40 и 20, теперь он на высоте 15. Это значит, что он чувствовал. Для менее строгой проверки, подождите, пока он не станет ниже 10.


Все столбы одинакового размера. Это горизонтальный промежуток между двумя колоннами, который меняется :)
SanSolo

0

Держите счет того, как долго персонаж упал. (то есть как долго они двигались вниз). Как только они упали больше, чем на экран, они по определению сошли со сцены, да?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.