Schrift im Spiel.

Anfängerfragen zum Programmieren mit PureBasic.
deatwaz
Beiträge: 69
Registriert: 18.05.2005 20:17

Schrift im Spiel.

Beitrag von deatwaz »

Hi also ich habe mal bei einem Game gesehen, das die schrift aus Sprites besteht bzw aus einem Bild mit allen Zeichen(Buchstaben,Zahlen,Sonderzeichen), so meine frage ist wie kann man es vereinfacht hinbekommen aber den gleichen effekt erziehlt.

mein code für jeden einzelnen buchstaben wäre:

Code: Alles auswählen

;- erster buchstabe
LoadSprite(0,"images\font\standard.png",0)
TransparentSpriteColor(0,180,255,0)
;- zweiter buchstabe
LoadSprite(1,"images\font\standard.png",0)
TransparentSpriteColor(1,180,255,0)

;- erster buchstabe
    DisplayTransparentSprite(0,160,120) 
    ClipSprite(0,0,8,8,8)
;- zweiter buchstabe
    DisplayTransparentSprite(1,168,120) 
    ClipSprite(1,8,8,8,8)

Was ich haben will bzw. anstrebe ist es vereinfacht zu machen über variable oder so. Vieleicht kennt ihr euch da besser aus.

plz help
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Du musst dieses Schriftbild nur einmal laden und dann mit [c]ClipSprite()[/c] die einzelnen Buchstaben während dem Darstellen ausschneiden, wenn du den String Zeichen für Zeichen durchgehst.

Reicht das als Ansatz. Was die Befehle machen, ist dir ja anscheinend schon klar.

Ansonsten schau mal ins Code-Archiv oder such hier im Board. Da gibt es schon ein paar Codes.
deatwaz
Beiträge: 69
Registriert: 18.05.2005 20:17

Beitrag von deatwaz »

ja das problem ist ja nur das die schrift variable angezeigt werden soll also über all wo ich will.

Code: Alles auswählen

LoadSprite(0,"images\font\standard.png",0)
TransparentSpriteColor(0,180,255,0)
repeat
    DisplayTransparentSprite(0,160,120)
    ClipSprite(0,0,8,8,8)     
    ClipSprite(0,8,8,8,8)
forever
D7u meinst so? Wenn ja das würd nur das zweite bild angezeigt da die position sich überlapen.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Du musst erst clippen, und dann erst den Buchstaben auf seine Position setzen mit [c]Display...Sprite()[/c].

Schau dir mal die Hilfe etwas genauer an.
deatwaz
Beiträge: 69
Registriert: 18.05.2005 20:17

Beitrag von deatwaz »

muhaha danke es funzt. Nächstes mal lese ich erst richtig.
Benutzeravatar
SDX
Beiträge: 95
Registriert: 14.01.2005 18:37
Wohnort: Bremen
Kontaktdaten:

Beitrag von SDX »

Ich hab zu meinen PB-Anfängen mal einen kleinen Scroll-Text gebastelt und da hab ich einfach die Buchstaben einzeln geladen. Jeder Buchstabe hieß dann einfach Asc + "Dementsprechender Ascii-Code" + .png (z.B. "Asc65.png" für "A") und die "#Sprite" war natürlich auch der Ascii-Code.

Code: Alles auswählen

For Fon_T.b = 65 To 90
    Font$="Asc"+Str(Fon_T)+".png"
    LoadSprite(Fon_T, Font$, #PB_Sprite_Texture)
    CreateSprite3D(Fon_T, Fon_T)
    TransparentSpriteColor(Fon_T, 255, 0, 255)
Next Fon_T
Via Asc(Buchstabe$) kann man ja ohne Prob den Ascii-Code eines Zeichens rausfinden und gleich direkt zum darstellen benutzen. Ich hatte damals übrigens mit Sprite3D() gearbeitet. Das mit dem "Clippen" macht irgendwie jeder. Nunja... muss wohl auch irgendwo Vorteile haben :mrgreen:
.oO SDX Oo.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Warum umständlich, wenns auch einfach geht:
http://www.sjcdc.org/scott/A4FG-1_1E.zip

Damit einfach 256 Zeichen auswählen und erstellen.
Dann kann man auch ganz einfach durch ClipSprite die Sache laden. Das ganze geht dann von Zeichen 0 bis 256(oder wars 1 bis 255 oder sowas?) einfach mal ausprobieren.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
the one and only
Beiträge: 696
Registriert: 26.09.2004 20:17
Kontaktdaten:

Beitrag von the one and only »

DarkDragon hat geschrieben: von Zeichen 0 bis 256(oder wars 1 bis 255 oder sowas?)
Nein

Eigentlich gehts von 0 bis 255 und bei uns dummen Menschen die bei 1 anfangen zu zählen bis 256.
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

eigentlich geht es bis 2^8 also bis 256 und da der computer bei null zum zählen anfängt ist es von 0 bis 255.
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
the one and only
Beiträge: 696
Registriert: 26.09.2004 20:17
Kontaktdaten:

Beitrag von the one and only »

Ich sag jetzt nichts dazu sonst landen wir wieder im Mülleimer. Hab ich ja gesagt da der Computer bei 0 anfängt zu zählen (Was bei genauerem Überlegen auch wesentlich sinnvoller ist als bei 1 anzufangen) gehts bis 255. 256 wegen uns menschlichen n00bs und unserer 1 als erste Zahl.
Antworten