Beschreibung:
Dieses Beispiel zeigt die Möglichkeit numerische Werte in einer Art Dotmatrix (1 Dot = 1 Sprite) an der gewünschten Stelle in einem Screen anzuzeigen.
Anleitung:
Quelltext abspeichern, Ein PNG ins selbe Verzeichnis (8x8 Pixel) mit Namen "dot_8x8.png" - das sollte einen einzelnen Punkt darstellen!
Anmerkung:
Natürlich könnte man in Procedure DrawNumber(value.i, posx.i, posy.i) sich den Zwischenschritt mit dem ins temporäre Array kopieren ersparen, aber es läuft *g*
Screenshot vom Fenster:

Der Quelltext davon:
Code: Alles auswählen
; weil ich ein png als spritegrafik verwenden will
UsePNGImageDecoder()
Enumeration ;sprites
#dotmatrixpic
EndEnumeration
; initstuff - fehlerbehandlung ist dein kaffee ;)
InitSprite()
InitKeyboard()
OpenWindow(0,0,0,200,200,"test")
OpenWindowedScreen(WindowID(0), 0,0,200,200,0,0,0)
; unten in der datasection trage dein 8x8 pix für einen dot ein
CatchSprite(#dotmatrixpic, ?dotmatriximage)
; die dotmatrix ist ein array mit den Zahlen 0 bis 9
; eine zahl ist 3 breit, und 5 hoch bei 10 ziffern muss die matrix also 30 breit sein
Global Dim dotmatrix.i(30,5)
; einlesen ins array
Restore dotmatrixdata
For y = 0 To 4
For x = 0 To 29
Read dotmatrix(x,y)
Next
Next
; das wird verwendet um die uebergebene nummer an posx und posy anzuzeigen
; das png, welches als sprite verwendet wird sollte 8x8 pixel haben.
; andere bildgroessen lassen sich leicht dynamisieren, indem du die entsprechenden
; positionierung umschreibst, ich beschränke mich auf einen 8x8 "bildpunkt"
Procedure DrawNumber(value.i, posx.i, posy.i)
; helferleins
valuestr.s = Str(value)
valuelen.i = Len(valuestr)
outputmatrixdimension = valuelen * 4
; hier erstelle ich ein array mit den notwendigen dimension
Dim outputmatrix(outputmatrixdimension, 4)
; hier kopiere ich die "buchstaben" aus der dotmatrixdata in meine outputmatrix
For valuepos = 0 To valuelen - 1
dotmatrixoffset = Val(Mid(valuestr, valuepos+1, 1)) * 3
For innerpos = 0 To 2
For y = 0 To 4
outputmatrix(valuepos*3 + valuepos + innerpos, y) = dotmatrix(dotmatrixoffset + innerpos, y)
Next
Next
Next
; hier wird die outputmatrix an der gewünschten Stelle ausgegeben
For y = 0 To 4
For x = 0 To outputmatrixdimension
If outputmatrix(x,y) = 1
DisplaySprite(#dotmatrixpic, x*8+posx, y*8+posy)
EndIf
Next
Next
EndProcedure
; mainloop
Repeat
; windowevents wollen abgefragt werden, sonst schmiert das ab!
Repeat
event=WindowEvent()
Select event
Case #PB_Event_Gadget
If EventGadget() = 0
End
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
Until event=0
ExamineKeyboard()
; hier die zeichenroutinen
ClearScreen(RGB(0,0,0))
; und hier zeigen wir unseren supertollen highscore endlich an ;)
DrawNumber(345,20, 20)
DrawNumber(915, 20, 80)
FlipBuffers()
Delay(1)
Until KeyboardPushed(#PB_Key_Escape)
DataSection
; die Ziffern 0 bis 9
dotmatrixdata:
Data.l 1,1,1, 0,0,1, 1,1,1, 1,1,1, 1,0,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1
Data.l 1,0,1, 0,0,1, 0,0,1, 0,0,1, 1,0,1, 1,0,0, 1,0,0, 0,0,1, 1,0,1, 1,0,1
Data.l 1,0,1, 0,0,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 0,0,1, 1,1,1, 1,1,1
Data.l 1,0,1, 0,0,1, 1,0,0, 0,0,1, 0,0,1, 0,0,1, 1,0,1, 0,0,1, 1,0,1, 0,0,1
Data.l 1,1,1, 0,0,1, 1,1,1, 1,1,1, 0,0,1, 1,1,1, 1,1,1, 0,0,1, 1,1,1, 1,1,1
dotmatriximage:
IncludeBinary "dot_8x8.png"
EndDataSection
