[DEMO] Animiertes Image im Gadget (ImageLayer, Timer)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

[DEMO] Animiertes Image im Gadget (ImageLayer, Timer)

Beitrag von Kaeru Gaman »

konnte es nicht lassen und hab mal ne kleine Demo gecodet...

Code: Alles auswählen

;**************************************************************
;****
;**** Image Animation Demo
;****
;**** by Kaeru Gaman, 2009-03-10
;****
;**** PB Ver. 4.30
;****
;**************************************************************
CreateImage(0, 261,161) ; Maske1
  StartDrawing(ImageOutput(0))
    Box(0,0,260,160,$400000)  ; dunkelblauer Hintergrund
    FrontColor($40C020)       ; Linienfarbe
    Line(   0, 80, 260,   0)  ; Abszisse
    Line( 130,  0,   0, 160)  ; Ordinate
    For n=0 To 130 Step 10
      Line( 130+n, 77, 0, 7 ) ; Grid
      Line( 130-n, 77, 0, 7 )
      Line( 127, 80+n, 7, 0 )
      Line( 127, 80-n, 7, 0 )
    Next
    DrawingMode(#PB_2DDrawing_Outlined)
    Circle( 130, 80, 4)
  StopDrawing()
;**************************************************************
Dim Values.l(261)
  For n=0 To 261
    Values(n) = 80 - 60 * Sin( (n-130) / 15.7 )
  Next
;**************************************************************
CreateImage(1,261,161) ; Maske2
  StartDrawing(ImageOutput(1))
    ;* Koordinatensystem
    DrawImage(ImageID(0),0,0)
    ;* Kurve
    For n=0 To 261
      Plot( n, Values(n), $00FFFF)
    Next
  StopDrawing()
;**************************************************************
CreateImage(2,261,161) ; BildBuffer
Stepper = 0
  StartDrawing(ImageOutput(2))
    ;* Hintergrund
    DrawImage(ImageID(1),0,0)
    ;* Punkt
    Circle( Stepper, Values(Stepper), 7, $C08040)
  StopDrawing()  
;**************************************************************
OpenWindow(0, 0,#PB_Ignore, 300,200, "Image Animation Demo")
  ImageGadget(0, 18,18,261,161,ImageID(2),#PB_Image_Border)
;**************************************************************
TIMER = ElapsedMilliseconds() + 50    ; Refresh 50ms = 20 FpS
;**************************************************************
Repeat
  Event = WaitWindowEvent(10)
  Select Event
    ;**** Timer
    Case #Null
      If ElapsedMilliseconds() >= TIMER
        TIMER = ElapsedMilliseconds() + 50
        Stepper +1
        If Stepper > 261
          Stepper = 0
        EndIf
        StartDrawing(ImageOutput(2))
          ;* Hintergrund
          DrawImage(ImageID(1),0,0)
          ;* Punkt
          Circle( Stepper, Values(Stepper), 7, $C08040)
        StopDrawing()
        SetGadgetState(0, ImageID(2))  
      EndIf
    ;**** Close
    Case #PB_Event_CloseWindow
      EXIT = 1
  EndSelect
Until EXIT
;**************************************************************
Aktualisiert auf 4.40
- Line korrigiert
- Timer über AddWindowTimer

Code: Alles auswählen

;**************************************************************
;****
;**** Image Animation Demo
;****
;**** by Kaeru Gaman, 2009-03-10 (4.30)
;****
;**** PB Ver. 4.40   rev. 2010-01-16
;****
;**************************************************************
CreateImage(0, 261,161) ; Maske1
  StartDrawing(ImageOutput(0))
    Box(0,0,260,160,$400000)  ; dunkelblauer Hintergrund
    FrontColor($40C020)       ; Linienfarbe
    Line(   0, 80, 260,   1)  ; Abszisse
    Line( 130,  0,   1, 160)  ; Ordinate
    For n=0 To 130 Step 10
      Line( 130+n, 77, 1, 7 ) ; Grid
      Line( 130-n, 77, 1, 7 )
      Line( 127, 80+n, 7, 1 )
      Line( 127, 80-n, 7, 1 )
    Next
    DrawingMode(#PB_2DDrawing_Outlined)
    Circle( 130, 80, 4)       ; Origo
  StopDrawing()
;**************************************************************
Dim Values.l(260)
  For n=0 To 260
    Values(n) = 80 - 60 * Sin( (n-130) / 15.7 )
  Next
;**************************************************************
CreateImage(1,261,161) ; Maske2
  StartDrawing(ImageOutput(1))
    ;* Koordinatensystem
    DrawImage(ImageID(0),0,0)
    ;* Kurve
    For n=0 To 260
      Plot( n, Values(n), $00FFFF)
    Next
  StopDrawing()
;**************************************************************
CreateImage(2,261,161) ; BildBuffer
Stepper = 0
  StartDrawing(ImageOutput(2))
    ;* Hintergrund
    DrawImage(ImageID(1),0,0)
    ;* Punkt
    Circle( Stepper, Values(Stepper), 7, $C08040)
  StopDrawing() 
;**************************************************************
OpenWindow(0, 0,#PB_Ignore, 300,200, "Image Animation Demo")
  ImageGadget(0, 18,18,261,161,ImageID(2),#PB_Image_Border)
;**************************************************************
AddWindowTimer( 0, 0, 50 )            ; Refresh 50ms = 20 FpS
;**************************************************************
Repeat
  Event = WaitWindowEvent()
  Select Event
    ;**** Timer
    Case #PB_Event_Timer
      Stepper +1
      If Stepper > 260
        Stepper = 0
      EndIf
      StartDrawing(ImageOutput(2))
        ;* Hintergrund
        DrawImage(ImageID(1),0,0)
        ;* Punkt
        Circle( Stepper, Values(Stepper), 7, $C08040)
      StopDrawing()
      SetGadgetState(0, ImageID(2)) 
    ;**** Close
    Case #PB_Event_CloseWindow
      EXIT = 1
  EndSelect
Until EXIT
;**************************************************************
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Nice.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

thnx!
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Witzig! :D
Win11 x64 | PB 6.20
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

Jo. :allright:
Und wenn die Kugel nicht gestorben ist, kugelt sie noch heute in Wellenform umher... :wink:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

DrFalo hat geschrieben:Und wenn die Kugel nicht gestorben ist, kugelt sie noch heute in Wellenform umher... :wink:
... und kommt immer mal ins Raster... :wink:
Win11 x64 | PB 6.20
Antworten