Какой самый простой способ реализовать обнаружение столкновений в XNA Game с C #? - PullRequest
1 голос
/ 19 января 2011

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

Что касается столкновения, то язнаю только столкновение прямоугольника, и это в основном весь весло в целом.Я не знаю, как сделать так, чтобы весло имело 4 возможных точки столкновения с разными реакциями.

Ответы [ 3 ]

4 голосов
/ 19 января 2011

Просто разбейте весло на 4 части и сохраните его как одно целое:)

Collide метод возвращает -1, если не встречаются колеи, или первый индекс столкновения.

CollideIndex метод возвращает IEnumerable индексы столкнувшихся ректов.;)

Paddle p;
World w;
Ball b;

Rect[] paddleSections = new Rect[] 
{
  p.Section[0],
  p.Section[1],
  p.Section[2],
  p.Section[3],
}

Rect[] worldSections = new Rect[] 
{
  new Rect(p.Top, p.Left, p.Right, p.Bottom) // just simple world, for example
}

Rect[] ballSections = new Rect[] 
{
  new Rect(p.Top, p.Left, p.Right, p.Bottom) // just one ball piece, for example
}

Rect[] bricksSection = GetBrickRects();

int index = 0;
if ((index = Collide(ballSections, worldSections) != -1)
{
    foreach(int collideIndex in CollideIndex(ballSection[index], worldSection)
    {
        // worldSection[collideIndex] intersects ballSections[index]
        ...
        // something goes up here
    }
}

Назовите свой любимый алгоритм против шаров, стен, кирпичей.

Не забудьте прислать мне копию своей игры!

1 голос
/ 19 января 2011

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

) Есть действительно хороший список других движков, который, вероятно, будет более полнымчем то, что я мог бы предоставить в SO ответе на XNA Wiki:
http://www.xnawiki.com/index.php?title=Physics_Engine

0 голосов
/ 19 января 2011

Я бы разделил весло на канаты различной ширины, например:

ABBCCCDDDDDDDDDDDDCCCBBA

, где каждая буква представляет непрерывный прямоугольник (DDDDDDDDD - один широкий прямоугольник). Так как вы знаете, как пересекать риты, вы можете, скажем, установить для D rect, реакция будет совершенным отражением (180-альфа), где, как и для A, B, C, это будет (180 - альфа * фактор), где коэффициент зависит от прямоугольника, например для A это 2, для B 1.8, для C 1.5. Ну, технически для D коэффициент равен 1:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...