8

これは、Libgdx ゲームのレベルでの現在のレンダー メソッドです。レベルの右上隅に BitmapFont を描画しようとしていますが、白いボックスがたくさん表示されるだけです。

 @Override
    public void render(
            float delta ) {
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

        this.getBatch().begin();

            //myScore.getCurrent() returns a String with the current Score
        font.draw(this.getBatch(), "Score: 0" + myScore.getCurrent(), 600, 500);
        stage.act(Gdx.graphics.getDeltaTime());
        stage.draw();
        this.getBatch().end();
        }

スコア フォントをある種のアクターに追加してから、scene.addActor(myScore) を実行したいのですが、その方法がわかりません。Steigert のチュートリアルに従って、AbstractLevel クラスでシーン (フォント) をインスタンス化するメイン ゲーム クラスを作成し、このクラスをこのレベルで拡張しました。

これまでのところ、カスタム フォントは使用しておらず、空の new BitmapFont(); のみを使用しています。デフォルトの Arial フォントに使用します。後で、自分のより派手なフォントを使用したいと思います。

4

4 に答える 4

12

font.draw を stage.draw の後に移動してみてください。それをアクターに追加するのは非常に簡単です。新しいクラスを作成し、アクターを拡張するだけです。

import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Actor;

public class Text extends Actor {

    BitmapFont font;
    Score myScore;      //I assumed you have some object 
                        //that you use to access score.
                        //Remember to pass this in!
    public Text(Score myScore){
        font = new BitmapFont();
            font.setColor(0.5f,0.4f,0,1);   //Brown is an underated Colour
    }


    @Override
    public void draw(SpriteBatch batch, float parentAlpha) {
         font.draw(batch, "Score: 0" + myScore.getCurrent(), 0, 0);
         //Also remember that an actor uses local coordinates for drawing within
         //itself!
    }

    @Override
    public Actor hit(float x, float y) {
        // TODO Auto-generated method stub
        return null;
    }

}

お役に立てれば!

編集1:System.out.println(myScore.getCurrentScore());それが問題ではないことを確認するためにJust も試してください。float または int を返すように取得するだけで、"Score:"+ビットを実行すると文字列自体に変換されます

于 2012-11-10T04:42:27.037 に答える
3

この場合、 this.getBatch().end最初に電話する必要があるかもしれません。このような:

mSpriteBatch.begin();
mStage.draw();
mSpriteBatch.end();
//Here to draw a BitmapFont
mSpriteBatch.begin();
mBitmapFont.draw(mSpriteBatch,"FPS",10,30);
mSpriteBatch.end();

理由はわかりませんが、私にとってはうまくいきます。

于 2013-03-27T02:18:09.223 に答える
2

描画段階を開始する前にバッチを閉じて、白いボックスで同様の問題を解決しました。これは、stage.draw() が別のバッチを開始し、end() で終了していない前のバッチを無効にするためです。

したがって、現在の例では、描画ステージの前にthis.getBatch().end()を移動します。

    ...
    font.draw(this.getBatch(), "Score: 0" + myScore.getCurrent(), 600, 500);
    this.getBatch().end();
    stage.act(Gdx.graphics.getDeltaTime());
    stage.draw();
    }
于 2014-01-11T12:01:48.247 に答える
-2

Scene2D を使用している場合は、ステージと俳優を使用してみてください。長いコードを記述する必要はありません。非常に使いやすい MTX プラグインを確認してください。素晴らしいユーザー エクスペリエンスを作成できます

http://moribitotechx.blogspot.co.uk/

于 2013-06-09T07:04:45.410 に答える