我目前在我的项目中使用距离字段字体,如下所述:
https://github.com/libgdx/libgdx/wiki/Distance-field-fonts
其功能是通过使用距离场滤镜创建用hiero制作的自定义字体,并在绘制字体时将自定义片段着色器应用于批处理。完成字体绘制后,着色器将再次重置为null。
这在普通字体上没有问题,但是我找不到在Scene2d gui的旁边使用此技术的方法。在绘制距离场字体之前,我必须设置批处理的着色器,并且由于我无法直接访问scene2d gui actor绘制函数,因此我无法在正确的时间设置着色器(在纹理和字体绘制之间)例如按钮调用)。
我目前正在通过扩展基本gui Actor类(如Label和TextButton)来使用解决方法:
public class CustomLabel extends Label {
public ShaderProgram fontShader;
public CustomLabel(CharSequence text, Skin skin, ShaderProgram fontShader) {
super(text, skin);
this.fontShader = fontShader;
}
@Override
public void draw(Batch batch, float parentAlpha) {
batch.setShader(fontShader);
super.draw(batch, parentAlpha);
batch.setShader(null);
}
}
但这并不是最佳选择,因为不可能对所有标准的Scene2d gui类(如SelectBox和List)都适用。
另一个问题是,每次设置着色器时,批处理都会被刷新,这在gui密集型游戏中每帧可能导致20-40次刷新。
任何帮助将不胜感激,如果没有适当的解决方案,我还将考虑切换到另一种字体缩放解决方案(如果有)。