LibGDX:是否可以绘制BitmapFont并更新它?

时间:2016-08-25 10:37:32

标签: android android-studio libgdx

我尝试做的是:

  1. 在屏幕顶部绘制一个BitmapFont,让它下到底部,然后删除它。
  2. 当BitmapFont仍在向下移动时,请使用不同的文本绘制另一个BitmapFont。
  3. 重复1和2。
  4. 这可以通过一个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;
        }
    }
    

1 个答案:

答案 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