我正在尝试在基于LibGdx的Android游戏中显示弹出屏幕。在这样做时,我必须模糊将灰色应用于背景屏幕,该屏幕在显示弹出窗口时处于非活动状态。
截至目前为了达到这个目的,我已经创建了一个黑色背景和alpha 70%的纹理。此纹理绘制在主背景之上,因此可以实现。
但是上述方法需要与主背景相同的大尺寸纹理。它还增加了App和渲染方法的权重。
请帮助我采取合适的方法。
我的要求的示例图片如下所示。这是我在LibGdx中想要的效果,而不是特定于android
答案 0 :(得分:2)
您的纹理可以是1x1白色图像,可以拉伸以填充屏幕。 (白色,因此它更通用。)如果你不想计算如何相对于相机的位置拉伸它,你可以这样做:
private static final Matrix4 IDT = new Matrix4();
batch.setProjectionMatrix(camera.combined);
batch.begin();
//draw stuff in background
batch.setProjectionMatrix(IDT);
batch.setColor(0, 0, 0, 0.7f);
batch.draw(singlePixelTexture, -1, -1, 2, 2); //coordinates and size of the screen when identity projection matrix is used
batch.setProjectionMatrix(camera.combined);
//draw your front window
batch.end();
但是,您也可以单独保留投影矩阵,而是使用现有矩阵计算背景填充屏幕的位置和大小:
float camX = camera.position.x;
float camY = camera.position.y;
float camWidth = camera.viewportWidth;
float camHeight = camera.viewportHeight;
batch.setProjectionMatrix(camera.combined);
batch.begin();
//draw stuff in background
batch.setColor(0, 0, 0, 0.7f);
batch.draw(singlePixelTexture, camX - camWidth/2, camY - camHeight/2, camWidth, camHeight);
//draw your front window
batch.end();
而且仅供参考,虽然大纹理确实占用了更多的内存和加载时间,但它不会减慢渲染速度,除非它在没有mip映射的情况下缩小。
编辑:如何在运行时生成单个像素纹理:
singlePixelPixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
singlePixelPixmap.setColor(1, 1, 1, 1);
singlePixelPixmap.fill();
PixmapTextureData textureData = new PixmapTextureData(singlePixelPixmap, Pixmap.Format.RGBA8888, false, false, true);
singlePixelTexture = new Texture(textureData);
singlePixelTexture.setFilter(TextureFilter.Nearest, TextureFilter.Nearest);
请注意,pixmap必须在dispose
方法中处理,但您不希望在此之前执行此操作,或者如果GL上下文丢失,则纹理无法自动重新加载。
答案 1 :(得分:0)
您可以使用半透明黑色设置背景,例如#50000000