我想在游戏底部的某种日志中显示一些文本。
我想要一种确保文本适合特定大小的方法,如果超过该大小,我会自己修剪它(“bla bla bl...”)
我知道我可以通过使用 SpriteFont.MeasureString 获得文本将采用的大小 - 所以我知道特定字符串是否会超出限制。
最明显的解决方案涉及这种循环
StringBuilder display = new StringBuilder();
foreach (char c in string)
{
if mySpriteFont.MeasureString((display.Append(c)) > SOMEAMOUNT
{
display.append("...");
return display.toString();
}
}
但是我担心这种事情做起来非常昂贵。还有其他解决方案吗?
最佳答案
您将不得不在某处使用 MeasureString,这只是您使用的算法的一个例子。天真的解决方案是只从末尾裁掉一个字符,直到字符串适合为止。一个更好的建议是将它裁剪成两半,看看它是否合适,然后以这种方式找到解决方案。另一种方法是测量一次字符串长度,然后根据超出边界的字符串的比例进行近似。例如,如果您的限制是 100 像素,而您有一个 400 像素宽的字符串,则裁剪字符串的最后 3/4(以字符为单位)。然后,通过删除或添加近似字符串的一半并递归,直到您在一个字符内,恢复到“2 倍”方法。对于大多数情况,这应该足够快,并且近似阶段可能会很好地消除初始开销,特别是如果您的字符串很长,并且在某些情况下可能会立即给出结果。
关于c# - 将文本修剪为特定大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091751/