|
image1 - first image x1 - x position image1 is drawn at y1 - y position image1 is drawn at image2 - second image x2 - x position image2 is drawn at y2 - y position image2 is drawn at |
|
Returns True if the rectangles of two images overlap. This is the cheap collision test. It compares the two images' bounding boxes and nothing else, so transparent pixels count just as much as solid ones - two sprites whose corners graze each other register a hit even if the visible artwork never touches. Cheap is often exactly right. Blocky graphics that fill their frames, a Robotron-style shooter, a pickup you want to be generous about, a broad-phase filter before the expensive test: all fine. Pass the same x,y you would pass to DrawImage and each image's handle is taken into account for you. For pixel-accurate results use ImagesCollide instead. A good pattern in a busy game is both: ImagesOverlap over everything to throw out the obvious misses, then ImagesCollide on the few pairs that are close. There is no frame parameter - the test always uses frame 0 of each image, and takes its size from that frame. If your animation frames differ in shape and you need that to matter, use ImagesCollide, which does take frames. See also: ImagesCollide, RectsOverlap, ImageRectOverlap, ImageRectCollide. |
; ImagesOverlap Example
; ---------------------
Graphics 640,480,0,2
SetBuffer BackBuffer()
player=LoadImage("media/player.bmp")
; Create an asteroid image - a round boulder with empty corners
rock=CreateImage(96,96)
SetBuffer ImageBuffer(rock)
Color 130,120,110
Oval 8,8,80,80,True
SetBuffer BackBuffer()
px=100
py=100
While Not KeyDown(1)
Cls
; Arrow keys steer the ship
If KeyDown(203) Then px=px-3
If KeyDown(205) Then px=px+3
If KeyDown(200) Then py=py-3
If KeyDown(208) Then py=py+3
; ImagesOverlap only compares the two images' bounding rectangles -
; very fast, but transparent corners count as a hit
hit=ImagesOverlap(player,px,py,rock,272,192)
DrawImage rock,272,192
DrawImage player,px,py
; Flash a warning border while overlapping
If hit Then
Color 255,0,0
Rect 0,0,640,480,False
Rect 1,1,638,478,False
End If
Text 0,0,"Arrow keys: fly the ship into the asteroid Esc: exit"
If hit Then
Text 0,20,"ImagesOverlap=1 - boxes touch (even the transparent corners!)"
Else
Text 0,20,"ImagesOverlap=0 - fast rectangle-only test"
End If
Flip
Wend
End