Code: Alles auswählen
InitSprite()
InitSprite3D()
UsePNGImageDecoder()
Procedure ClockInit(x.l, y.l, width.l)
Global bhu_width.l
Global bhu_x.l
Global bhu_y.l
bhu_width = width
bhu_x = x
bhu_y = y
Enumeration
#bhu_uhg
#bhu_ugz
#bhu_ukz
#bhu_usz
EndEnumeration
LoadSprite(#bhu_uhg, "Zifferblatt.png", #PB_Sprite_Texture)
LoadSprite(#bhu_ukz, "Stunden.png", #PB_Sprite_Texture)
LoadSprite(#bhu_ugz, "Minuten.png", #PB_Sprite_Texture)
LoadSprite(#bhu_usz, "Sekunden.png", #PB_Sprite_Texture) ; PNGs Laden
TransparentSpriteColor(#bhu_uhg, 255, 255, 255)
TransparentSpriteColor(#bhu_ugz, 255, 255, 255)
TransparentSpriteColor(#bhu_ukz, 255, 255, 255)
TransparentSpriteColor(#bhu_usz, 255, 255, 255)
CreateSprite3D(#bhu_uhg, #bhu_uhg)
CreateSprite3D(#bhu_ugz, #bhu_ugz)
CreateSprite3D(#bhu_ukz, #bhu_ukz)
CreateSprite3D(#bhu_usz, #bhu_usz)
ClearScreen(255, 255, 255)
Start3D()
ZoomSprite3D(#bhu_uhg, bhu_width, bhu_width)
ZoomSprite3D(#bhu_ugz, bhu_width, bhu_width)
ZoomSprite3D(#bhu_ukz, bhu_width, bhu_width)
ZoomSprite3D(#bhu_usz, bhu_width, bhu_width) ; Zoomen
DisplaySprite3D(#bhu_uhg, bhu_x, bhu_y)
DisplaySprite3D(#bhu_ukz, bhu_x, bhu_y)
DisplaySprite3D(#bhu_ugz, bhu_x, bhu_y)
DisplaySprite3D(#bhu_usz, bhu_x, bhu_y) ; Anzeigen
Stop3D()
FlipBuffers()
EndProcedure
Procedure ClockSet(time.l)
; Egal wie das Format aussieht, daraus lassen sich Stunden, Minuten(, Sekunden) errechnen
; Zum Testen:
stunden = Hour(time)
minuten = Minute(time)
sekunden = Second(time)
; Ende Manipulation
ClearScreen(255, 255, 255)
Start3D()
RotateSprite3D(#bhu_ugz, 0, 0)
RotateSprite3D(#bhu_ukz, 0, 0)
RotateSprite3D(#bhu_usz, 0, 0) ; Zurücksetzen
ZoomSprite3D(#bhu_ugz, bhu_width, bhu_width)
ZoomSprite3D(#bhu_ukz, bhu_width, bhu_width)
ZoomSprite3D(#bhu_usz, bhu_width, bhu_width) ; Zoomen
RotateSprite3D(#bhu_ukz, (stunden.l * 30) + (minuten / 2), 0)
RotateSprite3D(#bhu_ugz, minuten.l * 6, 0)
RotateSprite3D(#bhu_usz, sekunden.l * 6, 0) ; Drehen
DisplaySprite3D(#bhu_uhg, bhu_x, bhu_y)
DisplaySprite3D(#bhu_ukz, bhu_x, bhu_y)
DisplaySprite3D(#bhu_ugz, bhu_x, bhu_y)
DisplaySprite3D(#bhu_usz, bhu_x, bhu_y) ; Anzeigen
Stop3D()
FlipBuffers()
EndProcedure
If OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu, "")
If OpenWindowedScreen(WindowID(0), 0, 0, 500, 500, 0, 0, 0)
ClockInit(10, 10, 480)
Repeat
ClockSet(Date())
Delay(20)
Until WindowEvent() = #PB_Event_CloseWindow
EndIf
EndIf
Es gäbe übrigens noch zu sagen, das viele ATI-Grafikkarten nur Schwarz als Transparente Farbe bei Sprite3D annehmen. Aufgrund des Transparent wäre JPEG übrigens sowiso in die Hose gegangen...