2013-12-07 2 views
0

Итак, у меня есть прямоугольник, который я использую для прыгающего ящика. Я подпрыгиваю от шаров этого прямоугольника, поэтому вам нужно проверить, отскакивает ли он от оси x или y моего прямоугольника , Изначально у меня был код следующего кода, который был отлично подходит для обнаружения обычно два объекта встречных:Проблема с перегруженным прямоугольником

if (ballRect.Intersects(boxRect) 
{ 

} 

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

if (ballRect.Intersects(boxRect.X) 
{ 
//perform action 
} 

if (ballRect.Intersects(boxRect.Y) 
{ 
//perform different action 
} 

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

лучшим перегруженный встречный hod match для

'Microsoft.Xna.Framework.Rectangle.Intersects(Microsoft.Xna.Framework.Rectangle)' has some invalid arguments.

Почему это?

EDIT:

Очевидно, я использую прототип в неправильном пути, вместо того, чтобы кто-нибудь есть какие-либо советы о том, как я бы об обнаружении, если прямоугольник быть пересечены Х или оси Y?

Спасибо.

+0

Этот метод принимает только параметр Rectangle as. Если вы хотите проверить координату, вам, вероятно, понадобится 'Rectangle.Contains()' – pinckerman

ответ

2

Прототип:

Rectangle.Intersects(Rectangle rect) 

но вы пытаетесь кормить его целое число, которое не является прямоугольником.

+0

Ahh ok. Как я пойду на обнаружение, будет ли прямоугольник пересекаться по оси X или Y? – Rich

+0

Вам, скорее всего, придется написать свой собственный метод. – ohmusama

1

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

public static class RectangleExtensions 
{ 
    public static bool IntersectsOnX(this Rectangle rect, int xPoint) 
    { 
     return rect.Left <= xPoint && xPoint <= rect.Right; 
    } 
    public static bool IntersectsOnY(this Rectangle rect, int yPoint) 
    { 
     return rect.Top <= yPoint && yPoint <= rect.Bottom; 
    } 
} 

Тогда вы будете просто иметь возможность вызывать методы на каждом экземпляре: ballRect.IntersectsOnX(boxRect.X).

Обратите внимание, что вам нужно различать, какое пересечение вам нужно делать с одной точкой (X или Y), поэтому лучше иметь имена методов, которые говорят об этом.

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

  • Нет связанных вопросов^_^