我正在尝试逐个字符地绘制字符串,以便为由文本组成的形状添加光照效果。
while (i != line.length()) {
c = line.substring(i, i + 1);
cWidth = g.getFontMetrics().stringWidth(c);
g.drawString(c, xx += cWidth, yy);
i++;
}
问题是,当这两个字符作为字符串打印时,字符的宽度不是从另一个字符中绘制的实际距离。有没有办法在graphics2d中获得正确的距离?
答案 0 :(得分:2)
Lukas Baran的回答解决了可能导致输出看起来很糟糕的主要问题。然而,你不能以这种方式复制字距的更微妙的问题仍然存在。这有多大问题可能取决于您使用的字体。为了使字距变得正确,你可以这样做:
while (i != line.length()) {
String c = line.substring(i, i + 1);
String d = line.substring(0, i + 1);
int cWidth = g.getFontMetrics().stringWidth(c);
int dWidth = g.getFontMetrics().stringWidth(d);
g.drawString(c, xx + dWidth - cWidth, yy);
i++;
}
这应该将每个字符放在字距调整放置的位置。
答案 1 :(得分:0)
我不确定我是否正确理解了你的问题。但是,我已经测试了你的代码,实际上一些字符串字符相互重叠。
问题在于你增加xx
值(你在绘制字符之前增加它)。
以下是您的代码的更正版本:
public void myDrawString(Graphics g, String line, int xx, int yy) {
int i = 0;
while (i != line.length()) {
String c = line.substring(i, i + 1);
int cWidth = g.getFontMetrics().stringWidth(c);
g.drawString(c, xx, yy);
xx += cWidth;
//xx += 2;
i++;
}
}
取消注释并调整xx += 2
行以增加字符之间的空间。
答案 2 :(得分:0)
问题是字距调整定义了对字母的间距,并且迭代字符串char-by-char使得字距调整系统无法启动。我认为你必须使用固定宽度的字体或重新设计你的灯光效果,这样它就可以使用完整的字符串而不是单个字符。