i would how to get correct collision with zoomsprite() & spritepixelcollision().
Here is my test code :
Code: Select all
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Error", "Can't open the sprite system", 0)
End
EndIf
flag = #PB_Window_ScreenCentered|#PB_Window_SystemMenu
If OpenWindow(0,0,0,1024,768,"SetSpriteImage", flag)=0 Or OpenWindowedScreen(WindowID(0),0,0,1024,768)=0
MessageRequester("Error", "Can't open the sprite system", 0)
End
EndIf
UsePNGImageDecoder()
Procedure SetSpriteImage(sprite, image)
; change the image on a sprite
Shared w1, h1
w = ImageWidth(image)
h = ImageHeight(image)
If StartDrawing(SpriteOutput(sprite))
; erase the sprite
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, OutputWidth(), OutputHeight(),RGBA(0,0,0,0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(image), 0, 0, w1, h1)
StopDrawing()
EndIf
ZoomSprite(sprite, w, h)
EndProcedure
Procedure AddSprite()
Shared w1, h1
w1 = ImageWidth(0)
h1 = ImageHeight(0)
CreateSprite(1, w1, h1,#PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
SetSpriteImage(1,0)
EndProcedure
Procedure SetSpriteSize(sprite, width, height)
ZoomSprite(sprite, width, height)
EndProcedure
KeyboardMode(#PB_Keyboard_International)
LoadImage(0,#PB_Compiler_Home + "Examples\Sources\Data\GeeBee2.bmp")
LoadImage(1,#PB_Compiler_Home + "Examples\Sources\Data\world.png")
w2 = ImageWidth(1)
h2 = ImageHeight(1)
AddSprite()
SetSpriteImage(1, 1)
w.d = SpriteWidth(1)
h.d = SpriteHeight(1)
SetSpriteSize(1, w*20, h*20)
#SpriteMouse = 2
CreateSprite(#SpriteMouse, 16, 16, #PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
If StartDrawing(SpriteOutput(#SpriteMouse))
Box(0, 0, OutputWidth(), OutputHeight(),RGB(50,0,255))
StopDrawing()
EndIf
SpriteQuality(0)
Repeat
Repeat
event = WaitWindowEvent(1)
Select event
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until event = 0 Or quit = 1
x = WindowMouseX(0)
y = WindowMouseY(0)
ExamineKeyboard()
If KeyboardReleased(#PB_Key_A)
image= 1 - image
SetSpriteImage(1, image)
w = SpriteWidth(1)
h = SpriteHeight(1)
EndIf
If KeyboardPushed(#PB_Key_Up)
w *(1.01)
h *(1.01)
SetSpriteSize(1, w, h)
EndIf
If KeyboardPushed(#PB_Key_Down)
w *(0.99)
h *(0.99)
SetSpriteSize(1, w, h)
EndIf
FlipBuffers()
ClearScreen(RGB(50,50,50))
; display the sprite
DisplayTransparentSprite(1, 200, 200)
DisplayTransparentSprite(#SpriteMouse, x, y)
If SpritePixelCollision(1, 200, 200, #SpriteMouse, x, y)
Debug "collision : " + x + " / " + y
EndIf
; draw the bounding box for the sprite
If StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Outlined)
Box(200, 200, SpriteWidth(1),SpriteHeight(1), RGB(255,0,0))
StopDrawing()
EndIf
Until quit = 1 Or KeyboardReleased(#PB_Key_Escape)
CloseScreen()
End
So is it a bug or is my code wrong ?
Thanks for your answer