c# - 将文本修剪为特定大小

标签 c# xna

我想在游戏底部的某种日志中显示一些文本。

我想要一种确保文本适合特定大小的方法,如果超过该大小,我会自己修剪它(“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/

相关文章:

c# - 如何删除仅类型不同但使用非默认构造函数的方法之间的重复?

C#程序突然退出/崩溃,如何解决?

sql - XNA Windows 游戏简单数据库 Access - .mdb 不起作用 [非常基本]

c# - LINQ - 按距离排序(计算值)

c# - 在游戏中制作大量咒语时遇到困难

c# - 从文件夹中读取图像 (OpenCV)

C# 从 WMV 中提取特定帧

c# - 在类实例之间共享字典内容

c# - 如何从 XNA 游戏项目启动和调试控制台线应用程序

c# - 使用 as 运算符进行转换,即使在使用 is 运算符验证 C# 中的类类型之后?