UseBuffer() für Mac OS X - einfache Lösung

MAC OSX spezifisches Forum
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

UseBuffer() für Mac OS X - einfache Lösung

Beitrag von Lebostein »

Es funktioniert und ist voll kompatibel zu Windows oder Linux. :D

Code: Alles auswählen

; =======================================
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
; =======================================

Procedure UseBuffer(Sprite.l)

  Shared UsedSprite.l

  If Sprite = #PB_Default And IsSprite(UsedSprite)

    GrabSprite(UsedSprite, 0, 0, SpriteWidth(UsedSprite), SpriteHeight(UsedSprite))
    UsedSprite = #PB_Default

  ElseIf IsSprite(Sprite)

    DisplaySprite(Sprite, 0, 0)
    UsedSprite = Sprite

  EndIf

EndProcedure

; =======================================
CompilerEndIf
; =======================================

#Sprite1 = 1
#Sprite2 = 2

InitSprite()
OpenWindow(0, 100, 100, 512, 512, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 512, 512, 0, 0, 0)

TransparentSpriteColor(#PB_Default, $FF00FF)
CreateSprite(#Sprite1, 240, 240)
LoadSprite(#Sprite2, #PB_Compiler_Home + "examples/sources/Data/Geebee2.bmp")

UseBuffer(#Sprite1)
ClearScreen($FF0000)
DisplayTransparentSprite(#Sprite2, 10, 10)
DisplayTransparentSprite(#Sprite2, 100, 10)
DisplayTransparentSprite(#Sprite2, 10, 100)
DisplayTransparentSprite(#Sprite2, 100, 100)
UseBuffer(#PB_Default) ; nun unbedingt erforderlich, um die Änderungen zu übernehmen!

Repeat
  ClearScreen($0000FF)
  DisplaySprite(#Sprite1, WindowMouseX(0), WindowMouseY(0))
  FlipBuffers()
Until WaitWindowEvent(10) = #PB_Event_CloseWindow
Innerhalb der Hauptschleife sollte es vor dem ClearScreen() verwendet werden:

Code: Alles auswählen

Repeat

  UseBuffer(#Sprite1)
  ...
  UseBuffer(#PB_Default) ; nun unbedingt erforderlich, um die Änderungen zu übernehmen!


  UseBuffer(#Sprite2)
  ...
  UseBuffer(#PB_Default) ; nun unbedingt erforderlich, um die Änderungen zu übernehmen!


  ClearScreen()
  ...
  FlipBuffers()

Until WaitWindowEvent(10) = #PB_Event_CloseWindow