在libgdx中绘制带纹理的框架

时间:2017-12-03 19:34:54

标签: android opengl-es libgdx blending

我试图在Libgdx中绘制一个带有两个纹理的框架。我的纹理只是一个白色方块,我用SpriteBatch缩放和绘制到屏幕上。颜色设置为batch.setColor()。现在我想在中间绘制一个黑色矩形和一个较小的不透明矩形,所以它看起来像一个框架。

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); 现在的问题是,当我绘制它时,它只显示黑色矩形,因为透明矩形被绘制在它上面。我想绘制它,我可以通过第二个矩形看到我之前绘制的东西,所以它就像一个框架。 我的问题是:我怎样才能做到这一点?

Example Background

How it should look

How it looks

1 个答案:

答案 0 :(得分:0)

首先,您不应在render()方法中创建Color的新实例,因为它会在每一帧调用它会导致内存泄漏。例如,在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();
    }

}