J'ai remarqué que si on crée un sprite de petite taille, puis qu'on dessine une image de plus grande taille, c'est pixelisé.
C'est logique, mais existe-t-il un moyen de changer les dimensions du sprite (je ne parle de zoomsprite() ou tranformsprite() qui ne change pas les dimensions mais la taille d'affichage) ?
Pour tester, un petit code :
Code : Tout sélectionner
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(img = 1)
Shared w1, h1
w1 = ImageWidth(img)
h1 = ImageHeight(img)
CreateSprite(1, w1, h1,#PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
SetSpriteImage(1, img)
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))
DisplayTransparentSprite(1, 200, 200)
DisplayTransparentSprite(#SpriteMouse, x, y)
If SpritePixelCollision(1, 200, 200, #SpriteMouse, x, y)
Debug "collision : " + x + " / " + y
EndIf
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
Donc, c'est un peu la galère pour le moment, je me dépatouille comme je peux, mais si on pouvait modifier les dimensions d'un sprite sans devoir le recréer, ce serait cool

une idée ?
ps : Bon, après, de toutes façons, il y a un bug avec spritepixelcollision et zoomsprite() ^^