PlayBASIC - Line To Sprite Pixel Collision
Here's another screenie. This one is testing the latest LineHitSpritePixels() command. While it can detect if an Intersection occurs, it can't return the first point/normal of intersection. That's not so easy..
Also added PointHitSpritePixels(). So you can detect if a pixel overlaps a rotated/scale sprites pixels
LoadImage "ship.bmp",1
PrepareFXImage 1
Spr =NewSprite(450,150,1)
SpriteDrawMode spr,2+4096
SpriteAlphaAddColour spr,RGB(255,0,255)
RotateSprite spr,45
CenterSpriteHandle spr
SpriteCollisionMode Spr,1
w=GetImageWidth(1)
h=GetImageHeight(1)
max=100
Dim Sprites(MAx)
p=6
For lp=1 To max
Spr2 =NewSprite(Rnd(800),Rnd(600),1)
SpriteDrawMode spr2,2
SpriteImageUV spr2,0,p,p
SpriteImageUV spr2,1,w-p,p
SpriteImageUV spr2,2,w-p,h-p
SpriteImageUV spr2,3,p,h-p
SpriteCollisionMode Spr2,1
CenterSpriteHandle spr2
; ScaleSprite Spr2,RndRange(1,3)
RotateSprite spr2,10
Sprites(lp)=spr2
Next
PositionSprite sprites(1),400,300
Do
Cls RGB(100,100,100)
; PositionSprite spr,MouseX(),MouseY()
TurnSprite spr,(-1*LeftKey())+(1*RightKey())
For lp=1 To max
Spr2=Sprites(lp)
SpriteDrawMode spr2,2
SpriteAlphaAddColour spr2,$00ff00
TurnSprite spr2,0.55
If CompareSpritePixels(spr,spr2,0.50)
SpriteDrawMode spr2,2+4096
EndIf
Next
mX=MouseX()
mY=MouseY()
Dot mx,my
LockBuffer
For lp=1 To max
Spr2=Sprites(lp)
If PointHitSpritePixels(mx,my,spr2,0.5)
SpriteDrawMode spr2,2+4096
SpriteAlphaAddColour spr2,$ffff00
EndIf
Next
UnLockBuffer
Line lastx,lasty,mx,my
LockBuffer
For lp=1 To max
Spr2=Sprites(lp)
If LineHitSpritePixels(lastx,lasty,mx,my,spr2,1)
SpriteDrawMode spr2,2+4096
SpriteAlphaAddColour spr2,$00ffff
EndIf
Next
UnLockBuffer
If MouseButton()=2
lastx=mx
lasty=my
EndIf
DrawAllSprites
Sync
Loop
End