wie mach ich das?
es geht um folgendes.
ich möchte eine punktzahl, als einen score mit bildern darstellen.
also sagen wir die punktzahl beträgt 46
dann hat die 4 ein seperates bild und die 6 ein seperates bild.
will einen score im comicstil machen.
Hi, das musst Du nicht so kompliziert machen.
GLB ladet eh schon Bitmap fonts, erstell Dir einen Font mit dem in der IDE integrierten Tool
und bearbeite das ganze mit einem Paint Programm.
So kannst Du das ganze ganz normal als Font nützen.
Oder Du lädst das ganze als Tileset mit loadanim.
Dann sprichst Du die Frames einfach beim zeichnen direct an, frame 0 = zahl 0, frame 1 = zahl 1.
Ich würde aber zur ersten variante zurückgreifen.
Die Grafik musst Du eh erstellen.
Ich mach mal schnell eine Code beispiel, bis gleich.
Edit:
So, hier das beispiel und der font.
LOADFONT "comicfont.png",0
SETFONT 0
a = 500
LOADANIM "comicfont.png",0,36,43
WHILE TRUE
MOUSESTATE mx,my,b1,b2
PRINT a,10,10
DRAWANIM 0,53,mx,my
DRAWANIM 0,48,mx+36,my
DRAWANIM 0,48,mx+72,my
SHOWSCREEN
WEND
(http://www.deuteriumoxid.com/glbasic/comicfont.png)
FUNCTION graphtxt: txt$, x, y
FOR i = 1 TO LEN(txt$)
asciicode = ASC(MID$(txt$, i, 1))
IF asciicode > 47 AND asciicode < 58
fontframe = asciicode-48
ENDIF
DRAWANIM 0,fontframe, x, y
x=x+32
NEXT
ENDFUNCTION
irgendwie zeichnet es aber immer das selbe zeichen.
also statt der zahl 59 steht dann eben 99 da.
mmm
edit
so funktioniert es, kann mir das jemand bei dem FOR i = 0 TO LEN(txt$)-1
erklären?
FUNCTION graphtxt: txt$, x, y
FOR i = 0 TO LEN(txt$)-1
buchstabencode = ASC(MID$(txt$, i, 1))
IF buchstabencode > 47 AND buchstabencode < 58
fontframe = buchstabencode-48
ENDIF
DRAWANIM 0,fontframe, x, y
x=x+32
NEXT
ENDFUNCTION
Len gibt dir den wert 5 zurück( 1,2,3,4,5)
Du fängst aber mit I = 0 an zu zählen (0,1,2,3,4,5) das sind 6 zahlen/schleifen und nicht 5.
Bei drawanim fängt alles bei 0 an, daher Len()-1.
Sorrry, bin noch nicht ganz wach ;)
schwachsinn... :)
einfach:
LOADFONT "comicfont.png", 1
SETFONT 1
Score = 1234567890
WHILE TRUE
PRINT Score,10,10
SHOWSCREEN
WEND
END
genau Schranz0r, das ist die einfachste und bessere Methode.
Ausser er will alle Buchstaben einzeln bewegen.. dann muss er es natürlich anders machen :D
score$ = score
FOR i = 0 to LEN(score$)-1
char$ = MID$(score$, i,1)
PRINT char$, i*16, (SIN(i*180)+1)*64
NEXT
SHOWSCREEN
MOUSEWAIT
Quote from: Kitty Hello on 2008-Aug-04
score$ = score
FOR i = 0 to LEN(score$)-1
char$ = MID$(score$, i,1)
PRINT char$, i*16, (SIN(i*180)+1)*64
NEXT
SHOWSCREEN
MOUSEWAIT
Genau ^^