java LibGDX BitmapFont不会停止抖动
我有一个位图字体,当玩家以恒定的速度在屏幕上移动时,它会显示玩家的分数。因为播放器总是在移动,所以我必须重新计算每帧在哪个位置绘制字体。我使用这个代码
scoreFont.setScale(4f, 4f);
scoreFont.draw(batch, "" + scoreToShow, playerGhost.pos.x + 100f, 600f);
playerGhost.render(batch);
问题出在哪里?字体不停地抖动。它只需要几个像素的振动,但它有点明显。当我在平板电脑上运行它时,它会更加明显
这是已知的bug吗
- 我怎样才能让它停止颤抖李>
# 1 楼答案
调用
scorefont.setUseIntegerPositions(false);
,这样它就不会将字体的位置四舍五入到最接近的整数。您可能还希望将字体的最小过滤设置为Linear或MipmapLinearNet,最大过滤设置为Linear默认行为的原因是默认配置适用于像素完美的文本,适用于单位等于像素大小的视口集。如果视口的尺寸与屏幕的像素尺寸完全相同,此配置将有助于防止文本看起来稍微模糊
# 2 楼答案
实际上,这可能是因为您正在缩放字体
我遇到了这个问题,它很难理解(也很难修复)
基本上,在缩放字体时,BitmapFont会通过除法/乘法更改BitmapFontData中的值。如果使用许多不同的值(或不吉利的值组合)进行大量缩放,可能会引入舍入错误,从而导致字体边缘闪烁
我最终实现的解决方案是编写一个Fontholder,它存储所有原始BitmapFontData值。然后,我将字体数据重置为每帧开头的原始值(即render()方法的开始)
这是密码
我对此并不狂野,因为它有点骇人,但这是一种必要的邪恶,它将完全正确地解决这个问题
# 3 楼答案
正确的处理方法是使用两个不同的摄像头和两个不同的SpriteBatch,一个用于游戏本身,另一个用于UI。 在两个摄影机上调用
update()
方法,并在每个批处理上使用spriteBatch.setProjectionMatrix(camera.combined);
在每个帧的同时渲染它们