2016-08-25 57 views
0

我儘量讓是:LibGDX:是否可以繪製一個BitmapFont並更新它?

  1. 在屏幕的頂部繪製BitmapFont,讓它去下到谷底,在那裏被刪除。
  2. 儘管該BitmapFont仍在繼續,但可以用不同的文本繪製另一個BitmapFont。
  3. 重複1和2

這是可以實現的一個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

你的意思是對象BitmapFont?請張貼一些代碼,以便我們可以看到你的BitmapFont是什麼。 – IronMonkey

+0

對不起,我添加了一些我認爲可以幫助解決的代碼。 – GeeSplit

+0

您可以從BitmapFont中創建多個BitmapFontCaches並繪製它們。它們重量更輕,不需要處理。 – Tenfour04

回答

0

您遍歷在word.words矩形對象,並正從字1(您從陣列獲取的對象)的座標,但你叫word.getWordString()爲他們所有。除非你改變循環內的word.getWordString()的值,否則你得到的字符串將是相同的。這就是爲什麼你的所有對象都有相同的字符串。

如果你想要在不同的文字上有不同的文字,你需要將它們存儲在eatch word1上。

現在看起來您只是使用Rectangle類來跟蹤其位置。

如果使用矩形和字符串創建一個名爲Word的類,則可以獲得所需的結果。

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對象在這樣對他們的陣列稱爲單詞和循環:

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

+0

我不確定我的理解。我已經有一個Word類,其中包含很多其他的東西。我會嘗試過濾出你不需要的東西,並將其放入第二個編輯中。 – GeeSplit

+0

如果有必要,我會給我兩個班的完整代碼,但我想我應該試着過濾出你不需要的東西。 – GeeSplit

+0

我做了一個快速編輯。如果您需要更多幫助,我需要使用render()和Word類來查看整個班級。 – IronMonkey

相關問題