2012-04-10 5 views
2

Я добрая новичок во всем этом, но я пытаюсь сделать себе простую 2D-игру на C++. Я решил сделать вид игры типа лабиринта, и то, что я делаю для этого, вытаскивает лабиринт как текстуру, а затем имеет другую текстуру, когда мой персонаж перемещается внутри этого лабиринта.простая двумерная обнаружение столкновения C++

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

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

ответ

1

В зависимости от типа лабиринта, если у вас есть только вертикальные и горизонтальные стены единичной длины, вы можете представить лабиринт и текущее положение в 2D-матрице/матрице и решить, будет ли новая позиция в порядке, чтобы перейти на содержание новой позиции в матрице лабиринта.

Вам придется сделать некоторый перевод в/из матричных координат и координат экрана

Преимущества:

  • вам не нужно читать с экрана
  • лабиринта может быть больше, чем умещается на экране - сделать соответствующую часть только

Недостатки:

  • Вы можете использовать только рельеф типа «bolck» (например, вертикальные/горизонтальные стенки)
  • если вы хотите добавить movign врагов, обнаружение столкновений может быть слишком грубым (вы не можете избежать монстра «только на волосок/пиксель»)
+0

Они просто вертикальные и горизонтальные стенки но все это на одной большой текстуре. Как я могу создать массив/матрицу и обновить ее? Я очень плохо знаю, что мне очень жаль. – user1324894

+0

Я бы разбил большую текстуру на маленькие плитки однородного размера (например, стена, дорожка, дверь и т. Д.), Затем динамически смоделировал экран на основе значений в матрице лабиринта (например, значение 0 в матрице представляет собой путь - , 1 - перекрытие стены). Затем вы можете делать все ваши вычисления на матрице и отображать состояние лабиринта на экране - преимущество в том, что оно более гибкое, чем одна большая текстура. Вы можете повторно использовать одни и те же плитки (экономия дискового пространства); динамически менять лабиринт (например, закрытая дверь и открытая дверь); и т. д. – Attila

+0

А я думаю, что я начинаю понимать, откуда вы родом, поэтому это будет квадратный массив меньших текстур, который бы все соответствовал друг другу, чтобы сделать карту? Потому что то, что я делаю в данный момент, рисует его как одну текстуру и перемещает персонажа вокруг, я перемещаю его в одном направлении и в то же время перемещаю карту в противоположном направлении, чтобы иметь возможность передвигаться по ней. Будет ли это так, если я изменил его на массив плиток? – user1324894

Смежные вопросы