game maker
Gebruikersnaam:
Wachtwoord:
Home Info Forums Help
Welkom, Gast. Alsjeblieft inloggen of registreren.
De activerings e-mail gemist?
+  Forums
|-+  Werken met Game Maker
| |-+  Tutorials en Uitbreidingen (Moderator: Maarten Baert)
| | |-+  [Scr + Exa] draw_text_bb
Pagina's: [1]
« vorige volgende »
Print
Advertenties

ojima510
Gebruiker


Offline Offline

Berichten: 245


« Gepost op: 15 Oktober 2012, 18:13:01 »

Tekst tekenen met bb-achtige codes


Dit script tekent een tekst met bb-achtige codes (zoals ook op dit forum worden gebruikt).


Versie: 
Gemaakt in:
 GameMaker 8.0 Pro

Ondersteunt:
 GameMaker 8.0 Lite (niet getest)
 GameMaker 8.1 (niet getest)
 Game Maker Studio (niet getest)



Wat doet het:

Stel je wilt deze tekst in GM tekenen (dit is een compleet willekeurige quote uit De legende van Sigurd en Gudrún, Tolkien):

Citaat
Gesteund op 't zwaard stond daar Sigurd; daar wachtte Brynhild, wapen omklemd.

Natuurlijk kan GM dit niet, omdat het programma de tekst alleen maar in zijn geheel cursief óf vetgedrukt óf allebei kan maken. In dit geval is dit script heel handig. Je neemt gewoon de 'bb-codes' van de tekst:

Code:
Gesteund op 't zwaard stond daar &iSigurd&i; daar wachtte &bBrynhild&b, wapen omklemd.

Het script zal dit dan tekenen, (letter voor letter), totdat hij een speciaal gedefinieerd symbool tegenkomt (in dit geval de '&'). Dan kijkt hij welke letter er volgt. Als het een 'b' is, dan zal hij bold aan/uitzetten (hij schakelt bold aan als deze uit is en andersom). Als het een 'i' is, dan doet hij hetzelfde, maar dan cursief.

Voor kleuren zijn er twee letters nodig. 1 om aan te geven dat er een kleurverandering is, en 1 om de kleur te definiëren. Dit doe je dan als:

Code:
Gesteund op 't zwaard stond daar &cySigurd&n; daar wachtte &cgBrynhild&n, wapen omklemd.

Dit zal de naam Sigurd geel (yellow) maken, en de naam Brynhild groen (green).

De letter 'n' zal de tekst helemaal resetten (met als standaard kleur de van te voren gedefinieerde kleur, met draw_set_color).

Het script ondersteunt tot nu toe:
 - vet, schuin (cursief)
 - 10 verschillende kleuren.

Het script ondersteunt nu (nog) niet:
 - verandering van de horizontale uitlijning (draw_set_halign)



Hoe gebruik ik het:

In een create-event óf game start-event moet je voordat je een ander script (behalve string_remove_bb) gebruikt, de volgende functie aanroepen:

GML:
text_bb_init()

Dit zal alle basis-variabelen oproepen.

Nu heb je wel al die variabelen, maar nu kan je nog niets, omdat je geen lettertypes hebt gedefinieerd. Dit kan met deze twee functies:

GML:
bbFont0 := text_bb_add('times new roman',11);
bbFont1 := text_bb_add_font(font0);

De eerste werkt net zoals font_add, waarbij je de naam van het lettertype als string opnoemt, en de grootte geeft. De ander gebruikt gewoon een GameMaker-font.

De return-values zijn getallen die aangeven welk lettertype je gebruikt. Deze kan je gebruiken voor weer twee functies:

GML:
text_bb_delete(bbFont1);

Deze verwijdert het lettertype bbFont1

GML:
draw_text_bb(2,2,'&bHello &n&cgWorld!','&',bbFont0);

Deze tekent de tekst Hello World! op plaats (2,2) met lettertype 0 (times new roman, 11).



Download:
Directe link
Link



Scripts en argumenten:

text_bb_init()
Moet altijd als eerste aangeroepen worden, bij voorkeur in een create- of game start-event.
Heeft geen argumenten.

text_bb_add(fontname,fontsize)
Voegt een font (lettertype) toe aan de scripts
fontname - Tekst (string) - De naam van het font (zie de GM-handleiding over font_add).
fontsize - Getal (real) - De grootte (in punten) van het lettertype.

text_bb_add_font(font)
Voegt een lettertype toe uit een GM-font
font - Font (lettertype) - Het lettertype dat je wilt gebruiken (let erop dat vet- / schuingedrukte lettertypes weer worden teruggezet naar normaal).

Let op: De bovenstaande twee functies geven een id terug. Deze heb je nodig om het lettertype te gebruiken in de volgende 2 functies

text_bb_font_delete(font)
Verwijdert het lettertype uit het geheugen van GameMaker.
font - Getal (real) - Het id dat je hebt gekregen toen je het lettertype aanmaakte.

draw_text_bb(x,y,str,sgn,font)
Tekent een tekst met bb-codes op de locatie (x,y)
x - Getal (real) - De x-locatie waar de tekst getekend moet worden.
y - Getal (real) - De y-locatie waar de tekst getekend moet worden.
str - Tekst (string) - De tekst die getekend moet worden.
sign - Teken (char) - Het teken dat een verandering van opmaak aanduid.
font - Getal (real) - Het id dat je hebt gekregen toen je het lettertype aanmaakte.

string_remove_bb(str,sgn)
Geeft een string terug zonder bb-codes
str - Tekst (string) - De tekst met bb-codes
sgn - Teken (char) - Het teken dat een verandering van opmaak aanduid.




Ondersteunde tekens:

n - zet de tekst weer terug naar normaal (standaard kleur, niet vet/schuin gedrukt)
b - wisselt tussen wel- en niet vetgedrukt
i - wisselt tussen wel- en niet schuingedrukt
c - verandert de kleur

Ondersteunde kleuren:

w - wit
r - rood
g - groen
b - blauw
y - geel
c - cyaan
p - paars
g - grijs
s - zilver
n - standaard kleur



Voorbeeld:

De volgende functies:

GML:
draw_text_bb(2,2,'The quick brown fox jumped over the lazy dog.','&',font0);
draw_text_bb(2,18,'&bThe &iquick &b&cybrown &nfox &crjumped &cgover &cbthe &cwlazy &cpdog.','&',font0);

geven dit als uitkomst:





Credits:

Je mag dit script vrij gebruiken, mits je niet doet alsof het de jouwe is, en bij enige herpublicatie van een kopie/verandering zegt dat het niet jouw script is en een link naar dit topic plaatst.

Bij gebruik van dit script in programma's/spellen graag ook credits.



Ik hoop dat je nog veel plezier aan dit script zal hebben.

- ojima



Changelog:

> 16-10, -- Scripts grotendeels herschreven. Het zijn nu 6 scripts i.p.v. 1. Download-link toegevoegd, bevat een .rar met daarin een .gmk en een .gmres. Ook zijn er enorme lag-spike verwijderd. (grofweg is de fps gestegen van +- 15 naar +- 250)

> 15-10 -- Een klein foutje in de code verholpen (de kleuren grijs en groen hadden dezelfde letter), en een extra tutorialtje toegevoegd bovenin. FPS vermindering (van +- 3 naar +- 15)

« Laatste verandering: 19 Oktober 2012, 21:37:04 door ojima510 »

Tijdelijk weg wegens computer-omstandigheden.

Mijn content:
[Scr + Exa] draw_text_bb
Naar boven Gelogd

Florian van Strien
Jurylid


Offline Offline

Berichten: 2420


« Antwoord #1 Gepost op: 15 Oktober 2012, 21:45:51 »

Mooi script. Gemoedelijk Het zou alleen sneller kunnen door het niet per karakter te tekenen, maar per stuk (met dezelfde opmaak). Ook is het misschien niet zo efficiënt om elke step (elke keer dat het draw event uitgevoerd wordt) fonts te creeren en weer te verwijderen, misschien beter het in een keer allemaal te creeren (functie bijvoorbeeld draw_text_bb_init()) en te verwijderen als je het niet meer nodig hebt (iets als draw_text_bb_clear()). Ook zou een argument width wel handig zijn.


Mijn spellen: Swapblocks, circloO, BLcGR, 80 Seconds Cave, TRrBL, The Contact Machine
Ik heb meegewerkt aan: Lines (WP, iOS)
Tutorials: Shaders - de basis, Asynchrone functies

Mijn oude forumnaam was flori9.
Naar boven Gelogd

ojima510
Gebruiker


Offline Offline

Berichten: 245


« Antwoord #2 Gepost op: 15 Oktober 2012, 21:53:00 »

@flori9:

Hey, bedankt voor je antwoord.

Ik denk erover om die lange if ... else if ... else if ... te veranderen in iets met string_pos

Iets als *_init() en *_clear zou inderdaad handig zijn, maar dan moet je niet vergeten om die twee wel aan te roepen.

Het argument width wilde ik eerst ook doen, maar toen kwam ik met een probleem(pje). Als ik namelijk 'gewoon' doe:

GML:
if (xx - argument0 > width) {}

dan krijg ik zoiets (dit is erg scheef en nep, maar je krijgt het idee):

Citaat
Gesteund op 't zwaard st
ond daar Sigurd; da
ar wachtte Brynhild, w
apen omklemd.

Dan moet ik helemaal gaan onthouden waar de laatste spatie zat, teruggaan naar dat punt en dan een nieuwe regel beginnen. Dat is best een gedoe (al kan ik een ds_list oid. gebruiken om de spaties te onthouden).

Maar alsnog bedankt voor je reactie.

- ojima

EDIT:

Toegevoegd. Nu zijn het 6 scripts, waarvan 1 *_init, 3 *_font_*, 1 draw_* en een utility (string_remove_bb).

- ojima

« Laatste verandering: 17 Oktober 2012, 12:53:37 door ojima510 »

Tijdelijk weg wegens computer-omstandigheden.

Mijn content:
[Scr + Exa] draw_text_bb
Naar boven Gelogd

PiJoKra
Gebruiker

Offline Offline

Berichten: 718


« Antwoord #3 Gepost op: 20 Oktober 2012, 17:09:52 »

Mooi script, toch bestaat hier al een andere variant van, die met echte BBCode werkt. Ook vind ik BBCode fijner werken dan de karakters die jij gebruikt. Heb je trouwens ook een oplossing voor als ik echt "&b" wil drawen, ipv als style-opmaak gebruiken?

Naar boven Gelogd

ojima510
Gebruiker


Offline Offline

Berichten: 245


« Antwoord #4 Gepost op: 20 Oktober 2012, 21:05:51 »

Mooi script, toch bestaat hier al een andere variant van, die met echte BBCode werkt.

Die had ik nog niet gezien. In elk geval werkt mijn script iets anders dan dat script, maar voor de rest is het hetzelfde idee.

Ook vind ik BBCode fijner werken dan de karakters die jij gebruikt.

Dat is een kwestie van wat je zelf prefereert. Als je het handiger vind om 'echte' bb-codes te gebruiken, dan kan je dat script gebruiken. Anders is dit script ook handig. Ik had het gemaakt omdat ik het zelf nodig had voor een spel.

Heb je trouwens ook een oplossing voor als ik echt "&b" wil drawen, ipv als style-opmaak gebruiken?

Verander het teken '&' in iets anders, wat je niet nodig hebt (als je echt alle 256 tekens van de ASCII-kaart nodig hebt, dan is er geen oplossing natuurlijk, maar dat lijkt me sterk). Overigens heb je dit soort problemen ook bij dat voorbeeld dat jij gaf, want wat nou als ik daar ['b] wil tekenen (maar dan zonder apostrof)?

- Ojima


Tijdelijk weg wegens computer-omstandigheden.

Mijn content:
[Scr + Exa] draw_text_bb
Naar boven Gelogd

Florian van Strien
Jurylid


Offline Offline

Berichten: 2420


« Antwoord #5 Gepost op: 20 Oktober 2012, 21:30:05 »

Verander het teken '&' in iets anders, wat je niet nodig hebt (als je echt alle 256 tekens van de ASCII-kaart nodig hebt, dan is er geen oplossing natuurlijk, maar dat lijkt me sterk). Overigens heb je dit soort problemen ook bij dat voorbeeld dat jij gaf, want wat nou als ik daar ['b] wil tekenen (maar dan zonder apostrof)?

- Ojima
Ik heb dit niet getest, maar bij bb-code op het forum werkt dit altijd: [b[b][/b]][/b], dus dat wordt: [b][/b]. Bij jouw exa kan zoiets misschien ook wel.


Mijn spellen: Swapblocks, circloO, BLcGR, 80 Seconds Cave, TRrBL, The Contact Machine
Ik heb meegewerkt aan: Lines (WP, iOS)
Tutorials: Shaders - de basis, Asynchrone functies

Mijn oude forumnaam was flori9.
Naar boven Gelogd

Advertenties
« vorige volgende »
Pagina's: [1]
Print


Topic Informatie
0 geregistreerde leden en 1 gast bekijken dit topic.

Ga naar:  

Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines
www.game-maker.nl © 2003-2020 Nederlandse Game Maker Community