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