# Text Ausgabe in Spielen!



## ToNyXXL (23. Apr 2007)

Hi,
ich programmie gerade ein Rollenspiel in Java mit vielen Grafiken und bin gerade dabei den ersten Menschen das sprechen beizubringen ^^
Nur welche Art der Textausgabe empfhielt sich denn nun für son Spiel?
Einfach drawString sollte es nicht sein, da automatische Zeilenumbrüche hinzugefügt werden sollen.
Da kam mir eine JTextArea in den Sinn, aber bei ersten versuchen kams mir so vor, als wenn die sich überhaupt nicht mit den ganzen Grafiken und Threads verträgt (oder es liegt an meiner Unwissenheit, da ich bisher nur mit AWT TextArea's programmiert habe, die man ja aber nicht transparent machen kann). 
Mach ich etwas bei den JTextArea's falsch, oder gibt es noch eine bessere Lösung??
Und wo ich schon mal am Fragen bin, wie bind ich eine JTextArea (Scrollbalken nicht erforderlich) so ein, das ich die Postion verschieben kann?? setLayout(null), JTextArea in JPane laden und diesen verschieben?? Hmm bei mir gabs nur Probleme mit den Threads dabei  :autsch: 

Wäre schön wenn ihr mir mal wieder helfen könntet!
Viele Grüße,
Torben


----------



## doctus (24. Apr 2007)

ich würde mal sagen, du machst dir eine eigene methode, die dann die stelle für den zeilenumbruch errechnet und das ganze dann in mehreren zeilen mit drawString ausgibt.

Lg doctus


----------



## Apo (24. Apr 2007)

kann doctus nur zustimmen
aus dem Graphics Objekt kannst du mithilfe von z.B. 
	
	
	
	





```
g.getFontMetrics().stringWidth("dein Ausgabetext");
```
 herausfinden wie lang dein String ist und ihn dann mithilfe von substring oder so cutten usw.


----------



## ToNyXXL (24. Apr 2007)

wow das klingt sehr gut!!
g.getFontMetrics().stringWidth("dein Ausgabetext");
berechnet dann die anzahl der buchstaben im string?
und wie erreich ich, dass der zB nach jedem 100 buchstaben nen zeilenumbruch macht? kann mir das gerade nicht richtig vorstellen? den string vorher in ein array verwandeln oder wie? 

oder habt ihr zufällig schon so ne 08/15 zeilenumbruch errechnen methode parat? =)

Aber erstmal danke ^^
Freu mich das ich auf ne JTextArea verzichten kann!!


----------



## doctus (25. Apr 2007)

> stringWidth
> 
> public int stringWidth(String str)
> 
> ...



So wie ich das verstehe, bekommst du nicht die Anzahl der Buchstaben, sondern die Breite der Strings zurück.

Lg doctus


----------



## ToNyXXL (25. Apr 2007)

ich hab mir da was überlegt! und zwar schreib ich in den text zB 
 rein, dann such ich die stelle ausm string raus, wo das drin steht, benutze substring(int beginIndex, int endIndex), und ersetze danach das 
 wieder? meint ihr das klappt, bzw gibts ne einfachere lösung?
weil auf die sache mit dem automatischen zeilenumbruch nach bestimmt vielen zeichen komm ich irgendwie net, vll hab ich die String Methoden in der java referenz auch nur nicht richtig gedeutet oO


----------



## ToNyXXL (25. Apr 2007)

juhu!
ich habs selber geschafft!
ich zeig euch mal meine lösung, die is zwar noch ziemlich "hässlich" aba naja egal ;P


```
boolean stringende = false;
            int index = 0;
            int anfangsindex = 1;
            int text_height = 300;
            String der_text;
            while(!stringende)
            {
                anfangsindex = index + 1;
                index = text.gibText(feld[map][npc_x_tmp][npc_y_tmp].gibDialog()).indexOf("#", anfangsindex);
                der_text = text.gibText(feld[map][npc_x_tmp][npc_y_tmp].gibDialog()).substring(anfangsindex, index);
                if(der_text.endsWith("+"))
                {
                    stringende = true;
                    break;
                }
                g.drawString(der_text, 250, text_height);   
                text_height = text_height + 20;
            }
```


und hier ein ausschnit aus meinem text 


```
text[1] = " Satz #Satz!#... ... ... ... #Satz#Satz#SatzSatz# +#";
```


----------

