2016-09-25 8 views
0

私はLibGDXを使い始めましたが、バッチを使用して問題が発生しました: レンダリング方法は、いくつかのボタンを含む、画面上のすべて。私のクラスButtonでは、ボタンをレンダリングした後、バッチを使ってテキストを描画します。 Screenクラスで「バッチ」を使用して描かれたテキストは、「レンダラー」を使用して描かれた長方形によって隠されています

問題は、それはそうここにあるいくつかのコードは明らかだかどうかを知りません(バッチが長方形のレンダラ後に始まる場合でも)テキストは、ボタンの四角形の後ろに描かれていることです
public void render(float delta) { 
    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    viewport.apply(); 
    vector3.set(Gdx.input.getX(), Gdx.input.getY(), 0); 
    viewport.unproject(vector3); 
    renderer.setProjectionMatrix(camera.combined); 
    renderer.setAutoShapeType(true); 
    renderer.begin(ShapeRenderer.ShapeType.Filled); 
    homeStars.render(renderer); 
    for (Button button: buttons) 
    { 
     button.render(renderer); 
    } 
    renderer.setColor(1,1,1,1); 
    //realCursor = cursorToWorldPosition(Gdx.input.getX(),Gdx.input.getY()); 
    //renderer.circle((vector3.x+1)*Const.WORLD_WIDTH/2,(vector3.y+1)*Const.WORLD_HEIGHT/2,5); 
    renderer.circle(vector3.x,vector3.y,5); 
    renderer.set(ShapeRenderer.ShapeType.Line); 
    for(HomeStar star : HomeStars.stars) 
    { 
     if(vector3.dst(star.position)<Const.MAX_DIST_MOUSE_STAR){ 
      renderer.line(vector3.x, vector3.y,star.position.x,star.position.y,Color.WHITE, Color.BLUE); 
     } 
    } 
} 

そして、Buttonクラスで :任意の助けをいただければ幸いです

public void render(ShapeRenderer renderer){ 
    if (mouseOn() == true){ 
     renderer.rect(position.x-width/2,position.y-height/2,width, height, Color.BLACK, Color.VIOLET, Color.BLACK, Color.VIOLET); 
    } 
    else if (mouseOn() == false){ 
     renderer.rect(position.x-width/2,position.y-height/2,width, height, Color.BLACK, Color.GRAY, Color.BLACK, Color.GRAY); 
    } 
    batch.begin(); 
    font.draw(batch, "yo", position.x, position.y); 
    batch.end(); 
} 

は、ありがとうございました!

答えて

1

SpriteBatchShapeRendererをネストすることはできません。 batch.begin()を呼び出す前にrenderer.end()を呼び出してから、batch.end()を呼び出した後renderer.begin()を呼び出すようにしてください:

renderer.end(); 
batch.begin(); 
font.draw(batch, "yo", position.x, position.y); 
batch.end(); 
renderer.begin(); 

あなたが学習しているので、今のためにそれを行うべきです。ただし、これはバッチ処理の目的を破るため、非常に非効率的になります。 ShapeRendererSpriteBatchの間で常に切り替えるのは避けてください。 SpriteBatchは四角形をレンダリングするのに最適なので、ボタンにはSpriteBatchしか使用しないでください(UIの場合はscene2を使用してください)。

+0

ありがとうございました。ところで、ShaperendererはSpriteBatchよりも適切ですか? – Vellyxenya

+0

素早くデバッグしたり、テクスチャ(フォントなど)を必要としない場合。 – Xoppa

+0

私は、ありがとう、非常に参照してください:) – Vellyxenya

関連する問題