Image collision when scaling
BlitzMax Forums/BlitzMax Beginners Area/Image collision when scaling
| ||
| Hi! I'm having a little problem trying to see if the mouse is over an image. The image is a PNG with alpha and I'd like pixel collisions (bounding box kind of defeats the purpose of the transparent PNG). What I used is a 1x1 image placed at the mouse cursor and check collisions between that and the transparent image. This works just fine when I'm at 100% scale and upwards, but if I scale things down, there's no more collision detected. While writing this post, I just thought that maybe that 1x1 image gets scaled to 0x0 or something and therefore no collision. Is there any better way to detect those collisions, or should I try to keep that image at 1x1 scale at all times? |
| ||
| Would *really* help if you provided some code. Anyway, I got the same issue but would fix it by doing a setscale before the colliderect: |
| ||
| Thanks for the answer, but I kind of found the solution. It is indeed my 1x1 pixel image that causes the problems. Some basic code should look like this:
SuperStrict
Graphics 800, 600
Global img1:TImage = LoadImage("leaf.png")
Global Pixel:TImage = LoadImage("Data\Gfx\dot2.png")
SetBlend ALPHABLEND
Global Scale:Float = 1.0
While Not (KeyHit(KEY_ESCAPE) Or AppTerminate())
Cls
If (KeyHit(KEY_SPACE) )
If (Scale > 0.99)
Scale = 0.5
Else
Scale = 1.0
EndIf
EndIf
SetScale Scale, Scale
DrawImage img1,100,100
If (ImagesCollide(img1 , 100 , 100 , 0 , Pixel , MouseX() , MouseY() , 0) )
DrawText "Collision", 0, 0
EndIf
Flip
Wend
End
Sorry I can't provide the images, so if you're too lazy just forget it :) I've found the fix though: ImagesCollide2! Guess this was the purpose for that function. I can draw the first image scaled to any size, but keep my 1x1 image at 100% scale. Back to coding now... |
| ||
| Hmmm! ImagesCollide2 does under the covers what my code does. Using ImagesCollide2 won't be as flexible in scope but, as I don't know your scope, I'll leave that for you. |
| ||
| I was using ImagesCollide before, so it was a matter of adding a "2" and changing parameters. Thanks anyway :o) |
| ||
| I've never used the collision system, has anyone done any tests with hundreds of sprites moving around, colliding with each other and/or a background? |
| ||
| Hmm, never thought f benchmarking it. I'm using it for a level editor, so I'm really not that concerned about it. I can tell you that it runs fine with around 1000 alpha sprites checking collision with that 1x1 image on a Q6600 (what I have at work). I could optimize stuff by checking if they're on screen, then with bounding box, and then collision, but I don't feel the need right now. I will probably try a benchmark soon though. |
| ||
| I made a simple little game and used imagescollide() for collision detection, it had maybe up to 30-50 objects about 100x100 pixels on the screen at the most, compared against the player object. Was fine on a 2GHz dual core iMac ATI X1600 128mb. I expect it could handle more than that but at some point it's going to become apparent that it is doing a lot of work to find a collision. |