Code : Tout sélectionner
If InitSprite() = 0 Or InitKeyboard()=0 Or InitMouse()=0 Or InitNetwork()=0:MessageRequester("Error","Error DirectX",0):EndIf
If OpenWindow(0,200,0,800,500, "test bug hors limite ", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
If OpenWindowedScreen(WindowID(0),0,0,800,500,0,0,0,#PB_Screen_WaitSynchronization)=0:MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0):End:EndIf
EndIf
;créé un sprite carré rouge de 256x128
CreateSprite(0,256,128)
StartDrawing(SpriteOutput(0))
Box(0,0,256,128,#Red)
StopDrawing()
;transforme le sprite en un losange de 512x256
TransformSprite(0,256,0,512,128,256,256,0,256)
Repeat
FlipBuffers()
ClearScreen(#Black)
ExamineKeyboard()
WaitWindowEvent(4)
;ok fonctionne tant qu'on ne l'affiche pas au dela de sa largeur d'origine en dehors de l'écran cf 256
DisplaySprite(0,-255,0)
;ne fonctionne pas car on l'affiche hors de l'écran de plus que sa largeur d'origine cf 256
DisplaySprite(0,-256,256)
Until KeyboardPushed(#PB_Key_Escape)
Un seul s'affiche, il semble qu'un clipping soit fait sur le sprite en question de la largeur du sprite initial avant redimensionnement.(cad 256)
L'ennui c'est que je redimensionne les losanges en fonction de mon zoom, sur une carte isométrique (dimétrique pour être précis).
J'ai donc des "trous noirs" à la place des tiles de bords.
la solution serait bien sûr de charger des sprites de la taille initiale maximale à mon plus gros zoom, mais pour des question de mémoire c'est une solution que je ne peux envisager.
Une alternative serait de "remettre" mes losanges dans un sprite carré, mais ce n'est vraiment pas élégant, ça devrait marcher nativement avec la transformation ! De plus, je me sers de la transformation pour faire les reliefs en "pliant" les deux triangles du losange.
J'ai posté ds la section bug du fofo anglais, mais je sais que quoique moins nombreux, nous sommes plus réactifs sur ce forum