Sprite : héritage et parent

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Sprite : héritage et parent

Message par blendman »

Salut

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
J'utilise ce genre de code dans mon logiciel "SpriteAnimation" et c'est classe :D.