ImageRectOverlap (image,x,y,rect x,rect y,rect width,rect height)

Параметры

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


Главная страница

Нажмите сюда, чтобы увидеть последнюю версию этой страницы в Интернете