Je découvre juste aujourd'hui la fonvtion TransformSprite() et bien que ça ne fasse pas avancer la demande de Thyphoon, j'avais envie d'apporter cette petite contribution ..... just for fun
Code : Tout sélectionner
#Sprite0 = 0
#Sprite1 = 1
#Sprite2 = 2
#Sprite3 = 3
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Ooops ", "Impossible d'intialiser DirectX", 0)
End
EndIf
Win = OpenWindow(#PB_Any, 0, 0, 800, 600, "Sprite Rotation", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(win), 0, 0, WindowWidth(win), WindowHeight(win))
;Disable Backface Culling
Define pd3d.IDirect3DDevice9
EnableASM
!extrn _PB_Screen_Direct3DDevice
!MOV dword EAX, [_PB_Screen_Direct3DDevice]
!MOV dword [v_pd3d],EAX
DisableASM
pd3d\SetRenderState(22,1)
pd3d\SetRenderState(7,0)
;Define font
fontID=LoadFont(0, "Arial", 22, #PB_Font_Bold|#PB_Font_HighQuality|#PB_Font_Italic)
;Create #Sprite0
CreateSprite(#Sprite0, 200, 65, #PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#Sprite0))
;Text
Box(0, 0, 200, 65, RGB(0, 0, 0))
DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_AlphaBlend)
DrawingFont(fontID)
DrawText(20, 10, "PURE BASIC", RGBA(255, 255, 255, 255))
;Left border
DrawingMode(#PB_2DDrawing_Gradient|#PB_2DDrawing_AlphaBlend)
BackColor(RGBA(255, 255, 0, 255))
GradientColor(0.8, RGBA(255, 0, 0, 50))
FrontColor(RGBA(200, 70, 10, 255))
LinearGradient(0, 0, 0, 65)
Box(0, 0, 16, 65)
ResetGradientColors()
BackColor(RGBA(255, 255, 255, 255))
GradientColor(0.6, RGBA(150, 150, 150, 255))
FrontColor(RGBA(255, 255, 255, 255))
LinearGradient(25, 53, 30, 70)
For i=0 To 8
Box(20+i*20, 45, 10, 10)
Next
;Sprite and border outline
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_AlphaBlend)
FrontColor(RGBA(255, 255, 255, 255))
Box(0, 0, 200, 65) ;Sprite
Box(0, 0, 16, 65) ;Left border
StopDrawing()
TransparentSpriteColor(#Sprite0, RGB(0, 0, 0))
;three other sprites
CopySprite(#Sprite0, #Sprite1)
CopySprite(#Sprite0, #Sprite2)
CopySprite(#Sprite0, #Sprite3)
Rh = 1
Rv = 1
Repeat
ClearScreen(RGB(0,0,0))
;#Sprite0 : Horizontal Rotate
x+Rh
TransformSprite(#Sprite0, x,0, SpriteWidth(#Sprite0)-x,0, SpriteWidth(#Sprite0)-x,SpriteHeight(#Sprite0), x, SpriteHeight(#Sprite0))
If x>SpriteWidth(#Sprite0) ;
Rh=-1
ElseIf X=0
Rh=1
EndIf
;#Sprite1 : Vertical Rotate
y+Rv
TransformSprite(#Sprite1, 0,y, SpriteWidth(#Sprite1),y, SpriteWidth(#Sprite1),SpriteHeight(#Sprite1)-y, 0,SpriteHeight(#Sprite1)-y)
If y>SpriteHeight(#Sprite1)
Rv=-1
ElseIf y=0
Rv=1
EndIf
;#Sprite2 : Vertical Rotate
RotateSprite(#Sprite2, 1, #PB_Relative)
RotateSprite(#Sprite3, 180, #PB_Absolute)
;Show sprites
DisplayTransparentSprite(#Sprite0, 150, 100)
DisplayTransparentSprite(#Sprite1, 450, 100)
DisplayTransparentSprite(#Sprite2, 150, 350)
DisplayTransparentSprite(#Sprite3, 450, 350)
ExamineMouse()
ExamineKeyboard()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End