2010-04-11 1 views
2

Я работаю с xna на C#, и в своей игре у меня будет множество космических кораблей, летающих повсюду. Каждый из них будет иметь произвольное вращение, размер и положение в пространстве, и мне нужен метод, чтобы определить, когда они сталкиваются. В идеале метод должен принимать два прямоугольника, два двойника и два Vector2s для размера, вращения и положения соответственно и возвращать логическое значение, указывающее, пересекались они или нет.Обнаружение столкновений для произвольных размеров, позиционированных и повернутых прямоугольников в XNA

+0

Вы просите нас написать метод для вас или у вас есть тот, с которого вы уже начали? –

+0

Я ищу что-нибудь. Если вы можете написать метод для меня, это было бы потрясающе, но алгоритмы или концепции были бы полезны. – Stefan

ответ

3

Посмотрите на эти ссылки:

Collision Detection Overview
Collision Detection Matrices
Putting Collision Detection Into Practice

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

+0

@kyralessa: вы почти никогда не хотите делать идеальные столкновения пикселей в играх. Например, он делает игру с ракетками. При идеальном столкновении с пикселем это означало бы, что если 1 пиксель крыла ракеты коснется 1 пикселя наконечника его космического корабля, он взорвется. Обычно вы определяете поле столкновения как гораздо меньшую область внутри объектов. Это выглядит и чувствует себя намного лучше. – Toad

1

Этих прямоугольников, которые вы описываете, называется ФЖДОЙ (Ориентированно обрамление коробка)

Способом сделать столкновение между ними с помощью «разделяющой теоремы оси»

Действительно хорошая страница с описанием его в деталях с большим количеством снимки можно найти here

+0

Они не выровнены по оси, если они повернуты вокруг. –

+0

Вы, конечно, правы. Я имел в виду OBB. Теория все еще стоит за этими; ^) – Toad

2

Вы могли бы также рассмотреть только с помощью из коробки решения для этого и интегрируя что-то вроде предсказателя физического движка:
http://farseerphysics.codeplex.com/