【问题标题】:Apply the grey colour to inactive screen when showing popup显示弹出窗口时将灰色应用于非活动屏幕
【发布时间】:2015-04-03 11:14:53
【问题描述】:

我正在尝试在基于 LibGdx 的 Android 游戏中显示弹出屏幕。这样做时,我必须模糊将灰色应用于显示弹出窗口时处于非活动状态的背景屏幕。

到目前为止,为了实现这一点,我创建了一个黑色背景和 alpha 70% 的纹理。该纹理是在主背景之上绘制的,因此可以实现。

但上述方法需要一个与主背景相同的大尺寸纹理。它增加了应用程序和渲染方法的权重。

请帮我一个合适的方法。

我的要求的示例图片如下所示。这是我在 LibGdx 中想要的效果,而不是特定于 android

【问题讨论】:

  • 你在用scene2d吗?

标签: android libgdx game-engine


【解决方案1】:

您的纹理可以是 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);

请注意,像素图必须在dispose 方法中进行处理,但您不想在此之前进行处理,否则如果 GL 上下文丢失,纹理将无法自动重新加载。

【讨论】:

  • 我们能否在运行时生成灰色像素并在上面的示例中使用它。如果是这样怎么做?
  • 我已经像这样更新了 singlePixelPixmap.setColor(0, 0, 0, 100);你能告诉我#333333 的颜色设置吗?任何步骤/指针
  • 在绘制深色背景后,您可以随时将其切换回 1,1,1,1。白色像素更有用,因为您只需修改批处理颜色即可将其用于任何颜色,但如果您愿意,也可以按照自己的方式进行操作。要将十六进制转换为从 0 到 1 的数字,请将每个分量除以 255,因此颜色都是 0.129,而 alpha 应该介于 0 和 1 之间。
【解决方案2】:

您可以使用半透明黑色设置背景,例如#50000000

【讨论】:

  • 只设置背景颜色不会达到预期的效果。
猜你喜欢
  • 2022-09-28
  • 1970-01-01
  • 2021-11-12
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
相关资源
最近更新 更多