UPDATE: Never mind, I figured this one out on my own.
Thanks to advice I received in my thread on UnicodeFont, I decided to switch to AngelCodeFont and so far its working great. My problem now is how to do "text wrapping" (without it, my long Strings end up going off the screen).
The Strings are pulled from an external .txt file and stored in an ArrayList<String>, from which they are pulled one line at a time and rendered to the screen. Also, I know the point at which text wrapping needs to be applied (when the width of the String is greater than 770 pixels).
My question is how to implement text wrapping under these conditions.
The code in question is shown below (this is not the entire class...),
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| public class VisualNovelState extends BasicGameState { private static final String FONTDEF = "data/font/32ptArial.fnt"; private static final String FONTIMG = "data/font/32ptArial_0.tga"; private static final Color FONTCOLOR = Color.white; private static final int DIALOGUEX = 15; private static final int DIALOGUEY = 430; private static final int TEXTWRAP = 770; private static final String TEXTFILE = "data/gamedata/visualnovelscript.txt"; private AngelCodeFont font; private String dialogueText; private ArrayList<String> script;
public void setFont(AngelCodeFont font) { this.font = font; }
public AngelCodeFont getFont() { return font; }
public String getDialogueText() { return dialogueText; } public void setScript(ArrayList<String> script) { this.script = script; }
public ArrayList<String> getScript() { return script; }
@Override public void init(GameContainer container, StateBasedGame game) throws SlickException { this.setFont(new AngelCodeFont(FONTDEF, FONTIMG)); }
@Override public void enter(GameContainer container, StateBasedGame game) throws SlickException { TextFileReader parser = new TextFileReader(); this.setScript(parser.read(TEXTFILE)); }
@Override public void render(GameContainer container, StateBasedGame game, Graphics g) throws SlickException { this.getFont().drawString(DIALOGUEX, DIALOGUEY, this.getDialogueText(), FONTCOLOR); } } |