libGDX:如何在按键后逐行读取和显示.txt文件中的文本?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了libGDX:如何在按键后逐行读取和显示.txt文件中的文本?相关的知识,希望对你有一定的参考价值。
我是Java的新手,我正在尝试制作一种视觉小说类型的游戏。我想要做的是通过按空格按钮逐行显示文本文本中的文本,就像通常的小说一样。我忽略了不同的方法,但对我来说没有任何效果。我知道有Scanner和BufferedReader,但它们适合我正在做的事情吗?现在所发生的一切都是当我按下“空格”时整个文字出现在屏幕上,当我放开时,它消失了。
这是我的游戏类:
public class NovelGame extends Game {
public static final int WIDTH = 1366;
public static final int HEIGHT = 768;
public SpriteBatch batch;
public String txtFileString;
public String lines[];
public BitmapFont bitmapFont;
@Override
public void create () {
batch = new SpriteBatch();
bitmapFont = new BitmapFont();
this.setScreen(new MainMenuScreen(this));
txtFileString = Gdx.files.internal("script.txt").readString();
String[] anArray = txtFileString.split("\r?\n");}
@Override
public void render () {
super.render();
}}
这是我的游戏画面类:
public class MainGameScreen implements Screen{
private Texture img;
NovelGame game;
public MainGameScreen (NovelGame game) {
this.game = game;
}
@Override
public void show() {
img = new Texture("bck.jpg");
}
@Override
public void render(float delta) {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // This cryptic line clears the screen.
game.batch.begin();
game.batch.draw(img, 0, 0);
if(Gdx.input.isKeyPressed(Input.Keys.SPACE)){
game.bitmapFont.draw(game.batch, game.txtFileString,Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()/2);
}
game.batch.end();
}
我有一个想法,使用while和if显示它,但不能确切地弄清楚如何做到这一点。
编辑:我找到了一种显示文字的方法,但是现在,一旦我运行游戏,它就会在按下空格后开始无休止地堆叠在一起。
码:
public class MainGameScreen implements Screen{
private Texture img;
NovelGame game;
public MainGameScreen (NovelGame game) {
this.game = game;
}
@Override
public void show() {
img = new Texture("bck.jpg");
}
@Override
public void render(float delta) {
try {
BufferedReader br = new BufferedReader (new FileReader("C:\Users\hydra\Documents\JAVA_PROJECTS\gamespace\core\assets\startd.txt"));
while((game.strLine = br.readLine()) != null){
game.list.add(game.strLine);
}
br.close();
} catch (IOException e) {
System.err.println("Unable to read the file.");
}
if(Gdx.input.isKeyJustPressed(Input.Keys.SPACE)){
game.showText = true;
}
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // This cryptic line clears the screen.
game.batch.begin();
game.batch.draw(img, 0, 0);
if(game.showText) {
for(int i = 0; i < game.list.size(); i++) {
System.out.println(game.list.get(i));
game.bitmapFont.draw(game.batch, game.list.get(i), 100, 50);
}
}
game.batch.end();
}
答案
我发现最后我做错了什么。我把所有东西都放在渲染方法中,这就是无休止地阅读文件的原因。我只需要在构造函数类中执行一次,然后将其放在render方法中。
另一答案
问题在这里。如果当前只按键,Gdx.input.isKeyPressed
将返回true
。
if(Gdx.input.isKeyPressed(Input.Keys.SPACE)){
game.bitmapFont.draw(game.batch, game.txtFileString,Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()/2);
}
为了解决这个问题,添加一个布尔标志只需按下键即可激活它:
if(Gdx.input.isKeyJustPressed(Input.Keys.SPACE)){
showText = true;
}
并在渲染方法:
if (showText) {
game.bitmapFont.draw(game.batch, game.txtFileString,Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()/2);
}
以上是关于libGDX:如何在按键后逐行读取和显示.txt文件中的文本?的主要内容,如果未能解决你的问题,请参考以下文章
通过shell循环逐行读取两个txt文件,将两个不同文建内容拼成一个新文件txt