我有一个多语言项目(目前有13种语言),它使用了许多不同的字体变体“Helvetica Neue”,大多是LinoType Pro字体集(包括西欧字符)的粗体,浓缩和常规剪辑,以及西里尔。我们可能会在未来添加中文和日文版本。
我已将项目设置为使用不同的CSS样式表,并根据用户选择的语言单独加载每个版本的字体,因此我可以使用不同的行高,字距调整和/或字体大小来使所有内容保持不变原始外观,即使字体看起来没什么相似之处。
除了一个问题外,所有这些都很有效:出于某种原因,所有西里尔字母似乎都被取代了。它们显示在正确基线下方2-3个像素处,实际上突出显示在文本字段的下边框上,即使该字段设置为自动调整大小。当我使用textfield.getCharBoundaries()
时,所有值似乎都是正确的,即使它们显然没有正确呈现。
为了让一切看起来整洁,我当然可以根据语言和字体大小手动上下移动所有有问题的文本字段,但我想知道是否有某种方法可以防止或至少检测到这种位移以便自动处理调整 - Flash Player应该有关于如何呈现事物的某种信息,不应该吗?你们有没有类似的问题?或者更好:解决方案?
答案 0 :(得分:2)
我对中文有这个问题,但仅限于OS X和Windows。我无法弄清楚如何自动获得角色真实位置的适当指标。我最终得到了一个粗略的函数,每当我设置一个TextField时我都会调用它:
public static function adjustPositioning(field:TextField):void
{
if(OS != "MAC") return;
var fontSize:int = field.defaultTextFormat.size as int;
field.y += fontSize/5;
}
我在代码而不是IDE中设置了所有TextFields,所以这很简单。我想这是你不想要的解决方案!
答案 1 :(得分:2)
你的Helvetica Neue版本是否有西里尔文的字形?如果没有,那么你得到字体后备,俄语使用的字体实际上不是Helvetica Neue,而是其他指标。 如果你去中国,你会有更多的这个,因为Helvetica Neue肯定不包含中国字形: - )
另一方面,真的非常考虑TLF。这对国际支持来说更好,Flash Player 10.0(引入TLF)已经超过2.5年了。试着说服你的客户用古老的技术要求高水平的国际排版是不合理的。这是一个或两个交易。
答案 2 :(得分:1)
我遇到过与阿拉伯语相似的问题。似乎Adobe应用程序总是存在非英语语言问题。在某些语言中,在Flash播放器中,文本看起来已损坏,但在Flash Player中播放Flash时问题不存在。
我不确定问题的解决方案是什么,但你可以尝试一些解决方法。
尝试这项工作,但它变得更复杂: - 在每个按键上,将按下的字符作为图像插入。它可以解决您的问题,但编写代码需要更多时间
答案 3 :(得分:1)
我遇到了类似的问题,我尝试的所有解决方案都很复杂,或者有一些缺点:
使用TLF。我知道你不想, 但它非常安全(但很复杂) 溶液
不要使用“可读性”抗锯齿, 使用“动画”。字体会看起来 最坏的,但他们的指标应该是 更可靠。
尝试使用cacheAsBitmap或null 过滤器(即BlurFilter(0,0,0))。它 在某些情况下会有效,但不是全部。
手动将所有文本字段缓存为 的BitmapData。这应该表现得很多 更可靠的指标,但可以 棘手。你甚至可以解决这个问题 用getColorBounds飞行得到 “真正的”指标。但同样,这就是全部 非常棘手,需要大量的测试。
答案 4 :(得分:1)
听起来您正在使用的字体在西里尔字母的字形中存在实际错误。所以这是一个非常简单但令人烦恼的解决方案。编辑字体。这听起来很疯狂,但没有那么多的西里尔字形,你似乎想要一个字体。编辑它,分发更正的版本,然后就完成了。
Fontforge相当不错,我敢打赌你可以在设置后的一小时内编辑字体。
答案 5 :(得分:1)
您是否尝试过简单地修改字体以调整1px左右。简单地向上(或向下)移动字母我没有完全阅读每个人写的所有内容。虽然我目前没有安装它,但我相信我对编辑器的偏好是“Fontlab”。
答案 6 :(得分:1)
您是否尝试过使用固定宽度的字体?