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




