2017-12-03 14 views
0

Libgdx内に2つのテクスチャを含むフレームを描画しようとしています。私のテクスチャは、SpriteBatchを使って画面に拡大縮小して描画する白い四角形です。色はbatch.setColor()で設定します。今度は、真ん中に黒い四角形と小さな不透明な四角形を描きたいので、フレームのように見えます。libgdxにテクスチャを含むフレームを描画します。

batch.begin(); 
batch.setColor(new Color(0,0,0,1)); //Black 
batch.draw(rectangle, 0,0,100,100); 
batch.setColor(new Color(0,0,0,0)); //Transparent 
batch.draw(rectangle, 25,25,50,50); 
batch.end(); 

私はこのブレンド機能を使用しています:私は、これはそれだけで黒の矩形が透明矩形がそれの上に描画される原因を示し描くとき
Gdx.gl.glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR); 今問題があります。私は、それがフレームのように振る舞うように、前に描画したものを2番目の矩形で見ることができるように描画します。 私の質問は:これをどのように達成できますか?

Example Background

How it should look

How it looks

答えて

0

まず第一に、それがメモリリークにつながるすべてのフレームと呼ばれていますので、あなたは、あなたのrender()方法で色の新しいインスタンスを作成しないでください。たとえば、create()に色を作成します。また、黒色では独自のインスタンスを作成する代わりにColor.BLACKを使用できます。

に戻る TextureRegionクラスをそのまま使用できます。サンプルコードは次のとおりです。

public class MyGdxGame extends ApplicationAdapter { 

    SpriteBatch batch; 
    Texture whiteRectangle; 
    TextureRegion backgroundRegion; 

    @Override 
    public void create() { 
     //initializing batch, whiteTexture, etc... 

     //background, the one with a turtle from you example 
     Texture backgroundTexture = ...; 

     backgroundRegion = new TextureRegion(backgroundTexture); 
     //to set a region (part of the texture you want to draw), 
     //you can use normalized coordinates (from 0 to 1), or absolute values in pixels 
     backgroundRegion.setRegion(0.25f, 0.25f, 0.75f, 0.75f); 
    } 

    @Override 
    public void render() { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     batch.begin(); 

     //black background 
     batch.setColor(Color.BLACK); 
     batch.draw(whiteRectangle, 0, 0, 100, 100); 

     //on top of that background draw the backgroundRegion 
     batch.setColor(Color.WHITE); 
     batch.draw(backgroundRegion, 25,25,50,50); 

     batch.end(); 
    } 

} 
関連する問題