BitmapText² von ???
Hola Bürger

Habe mich heute Mittag beim Yoghurt an den Kopf fassen müssen, als ich immernoch über den Bitmap-Kram nachgedacht habe. Mein Problem war, dass ich nur eine kleine Game-Font machen wollte, die nicht alle nur erdenklichen ASCII-Zeichen von 32 bis 122 enthält. Platzsparend und so, heh. Dabei war die Lösung so erbärmlich einfach und ich saß da 3 Tage lang verzweifelt vor...

Ich war mal so frei und habe meine niedliche 8x8 Font hochgeladen (ist Für SNES/GBA Games zu gebrauchen :)), mit der ihr die Funktion gleich ausprobieren könnt. D/L ist am Ende vom Post.

Hier dann mal die kleine Funktion:
[code:1:450a51130c]
;BFont()
;Parameter:
; STRING Value - Text, der angezeigt wird
; INT X|Y - Koordinaten
; STRING Set - Reihenfolge der Zeichen in der Font
; HANDLE Fnt - Image Handle der Bitmap
Function BFont(Value$, X%, Y%, Set$, fnt)
While value$ <> ""
Lang% = Len(Value$)

;Achtung! Umlaute gehen mit UPPER$() nicht
Buchstabe$ = Left$(value$, 1)

Frm% = Instr(Set$, Buchstabe$) - 1

DrawImage fnt, X% + count% * 8, Y%, Frm%

Value$ = Right(Value$, Lang% - 1)
Count% = Count% + 1
Wend
End Function
[/code:1:450a51130c]

[url=http://divinedominion.art-fx.org/dl/bb/bfont.zip]Source, Font und Beispiel (8kb)[/url]
===
von ???
Dennoch denke ich daß meine Routine besser ist: Sie ist schneller und, ebenso wie bei Deiner, werden nicht vorhandene Zeichen einfach nicht gedruckt. Ich sehe keinen Vorteil.
===
von ???
@bruz: eigene Routinen sind IMMER besser ;) ^_^
===
von ???
Ich sah das eben einfach mal ganz objektiv =)
===
von ???
Hehe, konkurriert da etwa wer? ;)

Mit einer 40-Zeichen-Fonft brauch ich nur 40 Zeichen und keine 60 oder wieviele man sonst mit dem ASCII-Kram abdecken muss... D.h. das meine Bilddatei die nicht benutzen Zeichen garnicht erst haben muss, während ich bei einem Bereich von 32-122 (wäre OJays Beispiel, das soweit geht) der ASCII Codes alles nicht benutzte mit einer leeren Frame abdecken müsste.
Ich könnte mit meiner Methode theoretisch Fonts aus den 4 Zeichen "!(Y&" machen und brauche nur 4 Frames und muss nicht im ASCII-Kram wühlen.

War so nur eben einfacher und sah niedlicher aus :)
===
von ???
In meiner Routine wird auch nicht gewühlt, es ist ein 256 Frames Image (16x16) und verschlingt nicht wirklich Unmengen an Platz. Leere Frames stören nun wirklich nicht ;)
Jedes Frame steht für einen ASCII Code, womit man direkt auf ein Frame zugreifen kann, ohne vorher den String auf diverse Arten analysieren zu müssen.

Ok, in Blitzbasic2D fällt ein Overhead kaum auf, aber wenn man es in B3D für Sprites verwenden will, kommt es auf jeden Cycle an.
===
von ???
Gut, aber ich würde das später auch gerne für GBA-Coding benutzen. Schadet ja nicht, da wenigstens ein wenig zu sparen. Deswegen 8x8 Fonts.

Und diesen ganzen Kram wieder löschen? Geez :)
===
von ???
Hi.

Diese Text Routine einmal abgekürzt in einer Zeile:
[code:1:8f288eafcb]Function (Text$, x, y)
MyImage = CreateImage(StringWidth(Text$)+5,StringHeight(Text$)+5) : SetBuffer ImageBuffer(MyImage) : Text 1,1,Text$ : SetBuffer BackBuffer() : Return MyImage
End Function[/code:1:8f288eafcb]

Zeigt mir einen Optimiteren Code. -_-

@Edit: Warum kein Text-Image mit der ImageFont erstellen lassen? Dann spart man sich das andauernte erstellen und rumgespringe im Speicha ;)

PS. Das nenne ich Optimiert!

MfG ShadowTurtle
===
von ???
@ST: Dein Code ist Unsinn, wenn ich ohnehine einen Standardfont verwende, warum sollte ich dann erst in ein Image schreiben um dieses später zu blitten? ;)
===
von ???
Hi.

Stelle dir mal vor Du hast jetzt eine Schriftart in BMP mit allen buchstaben. Jetzt stellts Du ein Image zusammen, in dem die buchstaben (von der BMP Font) so zusammengestellt wird, dass es z.B. "Ich bin ein langer Text, dass Supi schnell angezeigt werden kann" ergibt.

Dann brauchst Du nämlich nicht jeden Frame die einzelnen buchstaben auf den FontImage raus zu picken, sondern einfach nur das andere Image anzeigen zu lassen, ohne jeden frame die ganze buchstaben neu zu "sotieren".

Ich würde mal sagen, dass Du noch einige 2D Programmier Tricks lernen musst, bruZard.

MfG ShadowTurtl
===
von ???
o_O

Wieso sollte ich für meine Texte immer (du meinst ja scheinbar immer) ein Image erstellen?
Gut, bei Anzeigen im Menü etc. ist das ja vielleicht sogar irgendwie Sinnvoll, macht aber nicht so drastisch viel Unterschiede aus.
===
von ???
Eigentlich lohnen sich Bitmap Font erst ab ner Höhe von 20 Pixeln. Bei allem darunter sind Muster/Texturen eh nicht zu erkennen und man kann getrost einfarbige Fonts mit der Text Funktion verwenden...
===
von ???
Hi.

[quote:7b12c7de82="DivineDominion"]o_O

Wieso sollte ich für meine Texte immer (du meinst ja scheinbar immer) ein Image erstellen?
Gut, bei Anzeigen im Menü etc. ist das ja vielleicht sogar irgendwie Sinnvoll, macht aber nicht so drastisch viel Unterschiede aus.[/quote:7b12c7de82]
Doch. Gerade in BB (wie Du in einen anderen Topic sagtest). Denn ein Image zu zeichnen ist schneller, als wenn z.B. 30 Image dargestellt werden.

MfG ShadowTurtle
===
von ???
Yo, das ist mir schon klar. Vorallem mit meinem komfortablen Font-System kann das ziemlich nervig werden, heh.

BigSnake:
Noe, um Gottes Willen! Ich will ja keine Hi-Res Games machen (selbst da ist ein Unterschied bemerkbar), sondern für GBA Coding üben. Ich weiß nicht wieso, aber irgendwas zieht mich dahin, heh. Deswegen versuche ich mich mal an BB-Projekten, die man vielleicht auf dem GBA wiederverwenden könnte. Dieser Font-Kram ist z.B. eine Sache.



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: