2016-05-24 4 views
0

プログラムでデバッグ用のテキストを追加しようとしています。私は、メインクラスにそうような選手debugDrawメソッドを呼び出します。ここではLibGdx Javaにテキストが表示されない

public void create() { 

    //Initialize essentials 
    cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    cam.setToOrtho(false); 

    rend = new ShapeRenderer(); 
    rend.setAutoShapeType(true); 

    batch = new SpriteBatch(); 



    // Initialize Entities 
    player = new Player(new Vector2(100, 100), new Vector2(100,100)); 
    enemy = new Enemy(new Vector2(100, 100), new Vector2(100,10)); 
} 

@Override 
public void render() { 
    //Update player 
    player.update(); 
    //Update camera then set matrix of batch 
    cam.update(); 
    batch.setTransformMatrix(cam.combined); 

    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    // ShapeRenderer begin 
    rend.begin(); 
    player.render(rend); 
    enemy.render(rend); 
    rend.end(); 
    // ShapeRenderer end 

    // SpriteBatch begin 
    batch.begin(); 
    player.renderDebugText(batch); 
    batch.end(); 
    // SpriteBatch end 

} 

はプレイヤーに親クラスであるエンティティクラスです:

public Entity(Vector2 coords, Vector2 dims){ 
    //Assign constructors 
    position = coords; 
    dim = dims; 

    //For debugging purposes of all entities 
    debugText = new BitmapFont(); 
    debugText.setColor(Color.WHITE); 
} 


public void renderDebugText(SpriteBatch batch){ 
    debugText.draw(batch, "Vel.x: " + vel.x, 100, 100); 

} 

私はプログラムを実行するときしかし、私はちょうど取得します私の普通の画面ではテキストが全くありません。なぜこれが動かないのか分かりません。どんな援助も非常に高く評価されます。

+0

投稿したコードから問題が表示されません。あなたが投稿していない他のコードで何か他のことが起こっていると思われます。 'resize'メソッドをオーバーライドしましたか? SpriteBatchでカメラマトリックスを設定しているのに気付きましたが、ShapeRendererでは設定しませんでした。ところで、あなたはフォントの1つのコピーを読み込み、すべてのエンティティに対して重複したコピーをロードするのではなく、 'renderDebugText()'メソッドに参照を渡すべきです。フォントは非常に重いオブジェクトです。 – Tenfour04

答えて

1

投稿したコードに間違いはありません。ここにいくつかのアイデアがあります。

デフォルト値は15ptで、これは15pxの高さで描画されている場合、フルHDのような高解像度にすると非常に小さくなります。私の現在のプロジェクトはFull-HDで、私が使っているフォントはちょうど約45ピクセルです。したがって、あなたは3倍または4倍にスケールアップすることができます。あなたのフォントを初期化した後にこれを使用してください。

bitmapFont.getData().setScale(3); 

あなたが特定の解像度を強制しているならば、あなたの代わりにあなたの仮想ディメンションに渡す必要がありますので、ごCameraも、仮想/ビューポートの大きさを持っている必要があります。

@ Tenfour04が示唆しているように、同じフォントの複数のインスタンスを避けるようにしてください。Entityクラスのフォントを初期化する代わりに、メインゲームで初期化し、Entityコンストラクタに渡します。これがあなたの問題をどのように修正するのか分かりませんが、これは純粋にパフォーマンスのためです。

+0

この回答は非常に有益であり、変換マトリックスがすべてのことをわかっていることを理解する助けになるので、私はあなたを最終的な答えとして受け入れます。 – Luke

0

私は非常に簡単な間違いを犯しましたが、どのくらいのコードを投稿したのかは分かりません。それは数字に限り連れて行ってくれた、なぜ私は

batch.setTransformMatrix(cam.combined);

を置くラインでは、それはその後、すべてのエラーが離れて行く

batch.setProjectionMatrix(cam.combined);

に置き換える必要があり、申し訳ありませんが、私は知りませんでる。すべての助けをありがとう!

+0

Aha!私は今、私はあなたのオリジナルコードが 'setTransformMatrix'を使用していることに気づいていませんでした。これは' setProjectionMatrix'でなければなりません。 – hamham

+0

「cam.combined」の代わりに「cam.combine」を入れてしまったのですが、それがエラーの原因だと思ったので私をしばらく混乱させました。私はあなたの答えを編集しようとしましたが、それは編集が6文字以下の差であるので私にはできません。 – hamham

関連する問題