Рис. 5.1. Прямоугольник, описанный вокруг хлеба.
Ширина полей между объектом и описанным вокруг объекта прямоугольником должна быть сведена к минимуму, чтобы объект обязательно касался прямоугольника в как можно большем количестве точек и отрезков линий. Если начало прямоугольной системы координат “x, y” находится в верхнем левом углу экрана , то координаты верхней левой точки (bx, by) и нижней правой точки (bx + batWidth, by + batHeight) однозначно определяют данный прямоугольник на экране.
В среде выполнения .NET Framework (для настольных компьютеров) известна структура Rectangle (из пространства имён System.Drawing), у которой метод-конструктор Rectangle Constructor имеет несколько перегрузок. Наиболее применяемая перегрузка метода-конструктора Rectangle Constructor (которую далее и мы будем часто применять) с параметрами (Int32, Int32, Int32, Int32) структуры Rectangle на главных (в мире программирования) языках приведена в табл. 5.1.
Таблица 5.1.
Метод-конструктор Rectangle Constructor (Int32, Int32, Int32, Int32) структуры Rectangle.
Visual Basic (Declaration)
Public Sub New ( _
x As Integer, _
y As Integer, _
width As Integer, _
height As Integer _
Visual Basic (Usage))
Dim x As Integer
Dim y As Integer
Dim width As Integer
Dim height As Integer
Dim instance As New Rectangle(x, y, width, height)
C#
public Rectangle (
int x,
int y,
int width,
int height
)
C++
public:
Rectangle (
int x,
int y,
int width,
int height
)
J#
public Rectangle (
int x,
int y,
int width,
int height
)
JScript
public function Rectangle (
x : int,
y : int,
width : int,
height : int
)
В этом определении метода-конструктора Rectangle Constructor параметры переводятся так:
x – координата “x” верхнего левого угла прямоугольника;
y – координата “y” верхнего левого угла прямоугольника;
width – ширина (по оси “x”) прямоугольника;
height – высота (по оси “y”) прямоугольника.
Далее в нашей программе мы сначала объявим прямоугольники, описанные вокруг объектов, как новые переменные, например, так:
//The rectangle, described around the first object:
Rectangle cheeseRectangle;
//The rectangle, described around the second object:
Rectangle breadRectangle;
а затем в каком-либо методе создадим (при помощи ключевого слова new) и инициализируем эти объекты-прямоугольники, например, так:
cheeseRectangle = new Rectangle(cx, cy,
cheeseImage.Width, cheeseImage.Height);
breadRectangle = new Rectangle(bx, by,
breadImage.Width, breadImage.Height);
5.2. Обнаружение столкновения прямоугольников, описанных вокруг подвижных объектов
В этой структуре Rectangle (из пространства имён System.Drawing) имеются методы, которые могут обнаруживать пересечения различных перемещающихся прямоугольников. Эти методы определяют, находится ли точка одного прямоугольника внутри другого прямоугольника, и если находится, то программа определяет эту ситуацию и как столкновение этих двух прямоугольников, и как столкновение двух объектов, расположенных внутри