在Scene2d中使用距离场字体

时间:2018-07-12 10:28:38

标签: java fonts libgdx 2d scene2d

我目前在我的项目中使用距离字段字体,如下所述:

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次刷新。

任何帮助将不胜感激,如果没有适当的解决方案,我还将考虑切换到另一种字体缩放解决方案(如果有)。

0 个答案:

没有答案