Я думаю, что название довольно самоочевидно, но просто чтобы прояснить, я пытаюсь выяснить, как определить, на какой стороне произошло столкновение.
Для большей детализации я пытаюсь сделать игру, похожую на лабиринт, поэтому я не могу просто остановить все движения при столкновении. Вместо этого мне нужно знать, на какой стороне произошло столкновение, чтобы я мог заблокировать это направление.
Любая помощь приветствуется, и если есть лучший подход к этой проблеме, я полностью ее опробую.
Я надеюсь, что этого достаточно, но если вам нужно больше, спросите, и я отредактирую. Заранее спасибо.
[править]
@viggity - Нет, я не использую какой-либо конкретный игровой движок, и я бы опубликовал текущий код «обнаружения», но он немного, нелепо, надежен.
@ Streklin - Я использую событие this.Paint, чтобы рисовать на самой форме, так как я рекомендовал начать с этого, чтобы лучше рисовать в реальном времени. Я также использую местоположение, которое обновляется каждый раз, когда срабатывает таймер в зависимости от того, что я нажимаю (влево, вправо, вверх, вниз). Да, лабиринт основан на плитке. В настоящее время он состоит только из 3 цветов. Я не очень продвинутый программист.
@ Эрик - Определенно однополая игра. Опять же, у меня есть только 3 цвета, линии черные, фон белый, а квадрат (пользователь) зеленый. Я использую DrawImage () с растровыми изображениями, чтобы рисовать на экране.
[редактировать сводку псевдокода]
foreach (стена в стенах)
если (player.intersectsWith (_wall))
остановить движение;
@ JeffH - Я не совсем уверен, что вы спрашиваете, так как это почти все, кроме тестирования кода, который я использовал, чтобы попытаться заставить его работать. Единственное, что я пропустил, - это оператор if, чтобы проверить, была ли это ось x или нет, чтобы x и y могли перемещаться независимо друг от друга. Таким образом, вместо того, чтобы застрять, потому что вы коснулись стены, вы можете скользить по ней. Я не видел смысла в том, чтобы включить это, хотя, так как проблема возникает до этого.