Seite 1 von 1

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

Verfasst: 10.03.2009 01:51
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
;**************************************************************

Verfasst: 10.03.2009 14:32
von AND51
Nice.

Verfasst: 10.03.2009 14:39
von Kaeru Gaman
thnx!

Verfasst: 10.03.2009 18:02
von Andesdaf
Witzig! :D

Verfasst: 10.03.2009 18:06
von rolaf
Jo. :allright:
Und wenn die Kugel nicht gestorben ist, kugelt sie noch heute in Wellenform umher... :wink:

Verfasst: 10.03.2009 18:08
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: