|
image = рисунок, который проверяется на столкновения
x = координата x рисунка y = координата y рисунка rect x = координата x начала прямоугольника rect y = координата y начала прямоугольника rect width = ширина прямоугольника rect height = высота прямоугольника |
|
Бывают случаи, когда Вы должны узнать, столкнулось ли изображение с определенной прямоугольной областью экрана. Эта команда выполняет проверку на пересечение между Вашим изображением и указанным прямоугольником на экране. Прозрачные пиксели игнорируются в процесса проверки, делая эту команду немного неточной для изображений, имеющих форму. См. ImageRectCollide для проверки столкновения между изображением и прямоугольной областью экрана с точностью до пикселя.. Эта команда полезна, когда Вы хотите, например, чтобы указатель мыши взаимодействовал с определенным участком экрана. В некоторых случаях элементы на экране, с которым Вы желаете взаимодействовать, будут содержать анимированные или движущиеся изображения. Для этой ситуации лучше использовать команды ImagesCollide или ImagesOverlap, чтобы обнаружить столкновение между рисунком указателя и этим изображением. В том случае, когда Вам нужно определить нахождение курсора мыши или рисунка в специфической области экрана (часто называемой 'горячей точкой'), эта команда незаменима! Как и с любым столкновением в Blitz-е, Вы должны будете знать ТОЧНОЕ местоположение рисунка, для которого Вы желаете проверить столкновение, а так же как x, y, ширину и высоту области экрана (rect), которую Вы желаете проверить. Пример использует изображения, которые являются намного меньшими чем их реальные размеры (контейнер), чтобы показать Вам, насколько неточной эта команда может быть - если не используется правильно. Пример ImageRectCollide похож на этот и показывает, насколько точен пиксельный метод определения столкновений с подобными рисунками |
| ; Пример ImageRectOverlap ; Установим графический режим Graphics 640,480,16 ; Создадим рисунок с кругом gfxCircle=CreateImage(50,50) ; Будем рисовать круг ; Выберем буфер нашего рисунка для рисования SetBuffer ImageBuffer(gfxCircle) Color 255,0,0 ; Вокруг круга оставим пустое пространство Oval 10,10,30,30,1 ; Не забудем переключиться на BackBuffer! SetBuffer BackBuffer() Color 0,0,255 ; Координаты прямоугольника случайные (в пределах экрана) hotX=Rnd(50,610) hotY=Rnd(50,430) hotW=Rnd(20,100) hotH=Rnd(20,100) ; Повторяем цикл до столкновения Repeat ;Прицепим рисунок с кругом к указателю мыши circleX=MouseX() circleY=MouseY() ; Стандартные команда двойной буферизации: сначала очищаем экран Cls ; Рисуем наш прямоугольник Rect hotX,hotY,hotW,hotH,0 DrawImage gfxCircle,circleX,circleY ; изображение - на экран Flip ;Проверяем столкновение Until ImageRectOverlap (gfxCircle,circleX,circleY,hotX,hotY,hotW,hotH) ; Если столкнулись, выводим сообщение! Text 0,0, "WE'VE HAD A COLLISION! PRESS A MOUSE BUTTON" ; Чтобы увидеть сообщение .. Flip ; Ждем нажатия кнопки мыши WaitMouse() ; Конец программы EndGraphics |