You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FreeTypeFontParameter.color不生效,无法设置白字黑边框的问题

解决LibGDX中带边框字体颜色不符合预期的问题

我一眼就看到问题出在哪了——你在初始化字体后,调用了arial24.font.setColor(0, 0, 0, 1);,这行代码直接覆盖了你在Font构造器里设置的白色前景色,导致文字主体和边框都变成黑色,自然看不到你想要的白字黑边效果。

问题根源

LibGDX的BitmapFont.setColor()方法会修改字体的默认绘制颜色,这个颜色会完全替代你在FreeTypeFontParameter中配置的color值,但不会改变borderColor。你原本设置了文字为白色、边框为黑色,结果这行代码把文字改成黑色,和边框颜色重合,就看不出边框了。

解决方案

方案1:移除覆盖颜色的代码

直接删掉HUD初始化里的那行setColor调用,保留构造器里的颜色配置即可:

// 修改前
arial24 = new Font("arial.ttf", 24, true);
arial24.font.setColor(0, 0, 0, 1); // 这行是罪魁祸首

// 修改后
arial24 = new Font("arial.ttf", 24, true);

方案2:动态设置颜色(如果需要调整文字颜色)

如果需要在不同场景下改变文字颜色,不要直接修改BitmapFont的颜色,而是在绘制时通过SpriteBatch或者draw方法的重载来指定:

方法A:通过SpriteBatch临时设置颜色
// 保存Batch原来的颜色,避免影响后续绘制
Color originalBatchColor = Game.getBatch().getColor().cpy();

// 设置文字颜色为你需要的颜色(比如白色)
Game.getBatch().setColor(Color.WHITE);
// 绘制文本
arial24.font.draw(Game.getBatch(), message, Game.getCamera().position.x - 80, Game.getCamera().position.y + 75);

// 恢复Batch原来的颜色
Game.getBatch().setColor(originalBatchColor);
方法B:使用draw方法的重载直接指定颜色
// 调用带颜色参数的draw重载,指定文字主体颜色
arial24.font.draw(
    Game.getBatch(), 
    message, 
    Game.getCamera().position.x - 80, 
    Game.getCamera().position.y + 75,
    0, // 换行宽度,0表示不换行
    message.length(), // 绘制的字符数
    0, // 换行偏移
    Align.left, // 对齐方式
    false, // 是否裁剪
    null, // 裁剪区域
    Color.WHITE // 文字主体颜色
);

额外优化建议

  • 如果边框效果不明显,可以尝试把borderWidth从1调整为2,增强视觉效果;
  • 确认font/arial.ttf路径正确,字体文件存在于你的本地资源目录中;
  • 你的Font类中已经正确调用了generator.dispose(),这部分做得很好,避免了资源泄漏。

内容的提问来源于stack exchange,提问作者QuickJAB

火山引擎 最新活动