2013-06-12 3 views
-1

Я пытаюсь создать платформу с XNA. Я не могу понять, как определить, находится ли объект под объектом «Символ», чтобы его можно было переместить, если он не находится над объектом.Проверка объектов непосредственно под объектом

+3

Что вы устали? Эта концепция называется Collision Detection, и у Google есть много информации об этом. – Romoku

+0

Я не искал обнаружения столкновений, но я посмотрел на stackoverflow для вещей с такими же ключевыми словами, как это. – user2479504

ответ

1

Концепция, о которой вы говорите, называется Collision Detection и является в основном ядром любой игры.

Одним из самых простых способов обработки обнаружения столкновений в XNA является использование Rectangle. Каждое из ваших сущностей (персонаж, предмет, оружие, монета, враг) должно использовать Rectangle как hitbox. Давайте изучим простой пример:

class Player 
{ 
    public Rectangle hitBox = new Rectangle(0, 0, 10, 30); 
    ... 
} 

class Coin 
{ 
    public Rectangle hitBox = new Rectangle(50, 50, 5, 5); 
    ... 
} 

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

Теперь, как проверить, есть ли столкновение? Это очень просто:

class Game 
{ 
    Player player = new Player(); 
    Coin coin = new Coin(); 

    if (player.hitBox.Intersects(coin.hitBox)) 
    { 
     // Do your stuff 
    } 
} 

Конечно, каждый раз, когда вы перемещаете плеер, вам необходимо установить положение хитбокс соответственно. Предположим, что вы переместили плеер на 5 пикселей вправо, вам также нужно переместить 5-ти и 5-ти пикселей вправо.

+0

Удивительный ответ, спасибо. – user2479504

0

Вы должны использовать BoundingBox для обнаружения столкновений, а простые позиции сравнить, если это «под» что-то. Это 2d, человек, очень простой, как бумага ...

Если ваша игра в 3D, мой ответ тот же.

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