我尝试做的是:
这可以通过一个BitmapFont实现,还是必须制作多个BitmapFonts才能使其正常工作?
编辑:
private BitmapFont font;
public PlayState(GameStateManager gsm) {
super(gsm);
cam.setToOrtho(false, Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
// TODO: change the font of the random word
font = new BitmapFont();
font.setColor(Color.BLACK);
@Override
public void render(SpriteBatch batch) {
batch.setProjectionMatrix(cam.combined);
batch.begin();
for (Rectangle word1 : word.words) {
font.draw(batch, word.getWordString(), word1.x, word1.y);
}
batch.end();
}
word.getWordString()
是我想要显示的文本,它随每个循环而变化。它现在所做的是更改在顶部产生的新绘制单词的文本,以及前一个单词的文本。
EDIT2:
public class Word {
public Array<Rectangle> words;
public Word(){
words = new Array<Rectangle>();
spawnWord();
}
public void spawnWord() {
Rectangle word = new Rectangle();
word.x = MathUtils.random(0, Gdx.graphics.getWidth() / 2 - 64);
word.y = Gdx.graphics.getHeight();
words.add(word);
}
public String getWordString(){
return wordString;
}
}
答案 0 :(得分:0)
您正在循环遍历word.words中的Rectangle对象并从word1(从数组中获取的对象)获取坐标,但是您可以为它们调用word.getWordString()。除非你在循环中更改word.getWordString()的值,否则你获得的字符串将是相同的。这就是为什么你的所有对象都有相同的字符串。
如果你想在eatch word1对象上有不同的文字,你需要将它们存储在eatch word1上。
现在看起来你只是使用Rectangle类来跟踪它的位置。
如果你创建一个名为Word的类,其上有一个Rectangle和一个String,你就可以得到你想要的结果。
public class Word{
private Rectangle bound;
private String wordString;
public Word(Rectangle bound, String wordString){
this.bound = bound;
this.theWord = wordString;
}
public String getWordString(){
return wordString;
}
public Rectangle getBound(){
return bound;
}
public void updateBound(float x, float y){
bound.x = x;
bound.y = y;
}
}
然后将Word对象存储在一个名为words的数组中,并像这样循环遍历它们:
batch.begin();
for (Word word : words) {
font.draw(batch, word.getWordString(), word.getBound().x, word.getBound.y);
}
batch.end();
EDIT1 我举了一个简单的例子。 pastebin我仍然无法看到你如何得到你的wordString,但这样你就将它存储在每个Word对象上。您不必跟踪字符串并始终更改它。您创建一个带字符串的Word,就是这样。 这也可以从屏幕上删除某个单词或更改特定对象上的文本。
[EDIT2] 我做了一个快速示例项目: link