voici un code pour qu'un sprite "hérite" de certaines caractéristiques de son parent (par exemple, un sprite tourne autour de l'axe d'un autre):
Merci à StarGate (forum anglais) pour l'aide .
Code : Tout sélectionner
; Nom :sprite herit
; by blendman
; date : 03 & 04 /2016
#Window_main = 0
If InitSprite() =0 Or InitKeyboard() =0
End
EndIf
Procedure SpriteTransformation(Sprite.i, X.f, Y.f, Width.f, Height.f, Angle.f)
; by stargate
Protected Cos.f = Cos(Radian(Angle))
Protected Sin.f = Sin(Radian(Angle))
TransformSprite(Sprite, X*Cos-Y*Sin, X*Sin+Y*Cos, (X+Width)*Cos-Y*Sin, (X+Width)*Sin+Y*Cos, (X+Width)*Cos-(Y+Height)*Sin,
(X+Width)*Sin+(Y+Height)*Cos, X*Cos-(Y+Height)*Sin, X*Sin+(Y+Height)*Cos)
EndProcedure
flag = #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget
WinW =800
WinH =600
If OpenWindow(#Window_main,0,0,WinW,WinH, "Sprite", Flag) = 0
End
EndIf
If OpenWindowedScreen(WindowID(0), 0,0,WinW,WinH) = 0
End
EndIf
LoadSprite(0,#PB_Compiler_Home+"Examples\Sources\Data\PurebasicLogo.bmp")
CopySprite(0,1)
CopySprite(0,2)
W =SpriteWidth(0)
H =SpriteHeight(0)
r.d = 0.5
r2.d = 0.3
ZoomSprite(0,10,10)
x = 250
dir = 1
y = 350
x1 = x + 165
y1 = y
Define b.f
Repeat
Repeat
EventID = WindowEvent()
Select EventID
Case #PB_Event_CloseWindow
End
EndSelect
Until event = 0
ClearScreen(RGB(50,50,50))
a+1
If a > 360
a = 0
EndIf
b+0.5
If b>360
b=0
EndIf
SpriteTransformation(1, -10,-(h*r)/2, w*r, h*r ,a)
DisplayTransparentSprite(1,x,y,255,#Red)
dx = x1 - x
dy = y1 - y
a2.d =Radian(a)
newdx = Cos(a2)*dx - Sin(a2)*dy
newdy = Sin(a2)*dx + Cos(a2)*dy
SpriteTransformation(2, -10,-(h*r2)/2, w*r2, h*r2 ,b+a)
DisplaySprite(2,x+newdx,y+newdy)
DisplaySprite(0,x-5,y-5)
FlipBuffers()
Until Quit = 1