当点击"菜单"按钮时,制作游戏并尝试覆盖屏幕 - 我想象的应该是相当普遍/简单,但仍然有实现它的问题.
我目前的设置:
正如许多人所建议的,对于性能,我只使用一个SpriteBatch - 因此各种资源和菜单Stage都使用相同的sprite批处理.
着色器的目的是添加一个深色/半透明叠加层以使屏幕变灰,以便打开时菜单更易于阅读.
我遇到的主要问题是因为资源和菜单共享相同的SpriteBatch,它们也共享相同的着色器......所以,当我启用着色效果时,所有内容(背景和菜单按钮)都会变灰.
我怎样才能只使用一个SpriteBatch但只将Shader应用于背景(并保持菜单按钮正常/无阴影)?
你可以使用:setShader(ShaderProgram shader)
你可以为你的着色器添加一些逻辑以启用叠加(统一,读取一些变化的属性等),但不建议这样做,因为你放在那里的每一行每秒执行一千次.
[推荐]你实际上可以绘制一个真正的叠加层.具有透明度的小灰色纹理(8x8px)并在背景之后和菜单之前绘制.那就是屏幕坐标,就像菜单一样,对吗?所以它也不会增加任何复杂性(创建一个足够大的精灵).
[高级]当您按下菜单时提供游戏暂停,您可以在单击菜单按钮时将屏幕复制到FBO.然后,您可以对图像进行后期处理(变暗,模糊),并将其用作菜单的背景.这将允许更好的效果,并且实际上更有效,因为洞场景绘制在fbo内部被"缓存"(绘制单个fbo纹理比重新计算孔场景更快).