Лучший способ использовать цикл, чтобы дать повторяющиеся инструкции для серии прямоугольников? - PullRequest
0 голосов
/ 26 февраля 2012

Я пишу игру в WPF и создал свой собственный код проверки столкновений.У меня есть код, работающий со столкновением между двумя прямоугольниками, но я хочу, чтобы он работал с несколькими прямоугольниками.

Я думал, что мог бы использовать цикл

как

UIElement[] rectArray;
for (int i=2; i < 6; i++)
{
    rectArray[2] = rect2;
    rectArray[3] = rect3;
    rectArray[4] = rect4;
    rectArray[5] = rect5;


                    calcLDouble = Canvas.GetLeft(rectArray[i]);
        calcTDouble = Canvas.GetTop(rectArray[i]);


        envLDouble = (backCanvasLDouble + calcLDouble);
        envTDouble = (backCanvasTDouble + calcTDouble);
        envRDouble = (envLDouble + (rectArray[i]).Width);
        envBDouble = (envTDouble - (rectArray[i]).Height);

За этим следует код проверки столкновения, я использую несколько холстов, поэтому приведенный выше код используется длярассчитать абсолютное положение прямоугольников.Я не могу заставить его заменить различные прямоугольники: rect2, rect3, rect4 и т. Д. Я получаю сообщения об ошибках.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2012

Я думаю, что лучший способ проверить коллизию - использовать Bounding Box, я всегда использую его в j2me, чтобы проверять между персонажем и несколькими боксами, ограничивающий бокс инициировать в конструкторе и проверять коллизию в игровом цикле. И, может быть, вам следует подробно рассказать о коде, чтобы я мог видеть ваш код и анализировать.

0 голосов
/ 26 февраля 2012

Для начала массив rectArray не инициализирован. Вы обращаетесь к нему по индексу в цикле, но вы объявили его без размера. Исправьте это, тогда, если есть дальнейшие проблемы, я предлагаю изменить вопрос, чтобы объяснить, что вы хотите сделать, что вы пробовали, и почему результат неудовлетворительный.

0 голосов
/ 26 февраля 2012

Вы хотите проверить не столкновение прямоугольников, а скорее "объекты" (если только вы не играете в "войну прямоугольников").Прямоугольники - это просто ограничивающий прямоугольник, который предоставляет вам первый (и, возможно, последний, если вам достаточно точности) в обнаружении столкновений.

Итак, вы должны иметь в своей игре:

  1. Способ получить все ваши игровые объекты, скажем, в массиве
  2. Способ получить ограничительный прямоугольник для любого из этих игровых объектов (например, все они могут реализовать интерфейс, такой как IBoundingRectangle ... которыйимеет член GetBoundingRectangle)
  3. Способ реагирования на это столкновение (взорваться, отскочить, исчезнуть, ...)
...