Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何防止某些外语字体的文本置换?_Actionscript 3_Flash_Fonts_Internationalization_Text Rendering - Fatal编程技术网

Actionscript 3 如何防止某些外语字体的文本置换?

Actionscript 3 如何防止某些外语字体的文本置换?,actionscript-3,flash,fonts,internationalization,text-rendering,Actionscript 3,Flash,Fonts,Internationalization,Text Rendering,我有一个多语言项目(目前有13种语言),该项目使用了“Helvetica Neue”的许多不同字体变体,主要是从LinoType Pro字体集(包括西欧字符)和西里尔文中删减的粗体、浓缩和常规字体。将来我们可能会添加中文和日文变体 我已经设置了使用不同CSS样式表的项目,并根据用户选择的语言分别加载每个版本的字体,因此我可以使用不同的线条高度、字距和/或字体大小,使所有内容都保持原始外观,即使字体看起来一点也不相似 所有这些都很有效,除了一个问题:出于某种原因,所有西里尔字母似乎都被替换了。它们

我有一个多语言项目(目前有13种语言),该项目使用了“Helvetica Neue”的许多不同字体变体,主要是从LinoType Pro字体集(包括西欧字符)和西里尔文中删减的粗体、浓缩和常规字体。将来我们可能会添加中文和日文变体

我已经设置了使用不同CSS样式表的项目,并根据用户选择的语言分别加载每个版本的字体,因此我可以使用不同的线条高度、字距和/或字体大小,使所有内容都保持原始外观,即使字体看起来一点也不相似

所有这些都很有效,除了一个问题:出于某种原因,所有西里尔字母似乎都被替换了。它们出现在正确基线下方2-3像素处,甚至在字段设置为“自动调整大小”时,也会穿过文本字段的底部边框。当我使用
textfield.getcharbounders()
时,所有值似乎都是正确的,即使它们显然没有正确呈现


为了使一切看起来整洁,我当然可以根据语言和字体大小手动上下移动所有有问题的文本字段,但我想知道是否有某种方法可以防止或至少检测到这种位移,以便自动处理调整-Flash播放器应该有一些关于事物如何呈现的信息,不是吗?你们有没有遇到过类似的问题?或者更好:一个解决方案

我在阿拉伯语方面也遇到过类似的问题。似乎Adobe应用程序总是会遇到非英语语言的问题。在某些语言中,Flash player中的文本看起来已损坏,但在Flash player中播放Flash时,问题并不存在

我不确定你的问题有什么解决办法,但你可以试着解决

尝试这项工作,但它会变得更复杂:
-在每个按键上,将按下的字符作为图像插入。它可以解决您的问题,但编写代码需要更多的时间

我遇到过类似的问题,我尝试过的所有解决方案都非常复杂,或者有一些缺点:

  • 使用TLF。我知道你不想, 但这是一个相当安全(但复杂)的系统 解决方案

  • 不要使用“可读性”抗锯齿, 使用“动画”。字体将看起来 最糟糕的,但他们的指标应该是 更可靠一点

  • 尝试使用cacheAsBitmap或null 过滤器(即模糊过滤器(0,0,0))。信息技术 在某些情况下有效,但并非所有情况下都有效

  • 将所有文本字段手动缓存为 位图数据。这应该说明很多 更可靠的指标,但可以 棘手的你甚至可以把它修好 使用getColorBounds飞行以获取 “真实”指标。但再一次,一切都结束了 非常棘手,需要大量测试


我在中文中遇到了这个问题,但只在OSX和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中,所以这很容易。不过,我想这是你不想要的解决方案

听起来您使用的字体在西里尔文的字形中有实际错误。因此,这里有一个极其简单但令人恼火的解决方案。编辑字体。这听起来很疯狂,但是西里尔字母符号并没有那么多,而且你似乎想要一种单一的字体。编辑它,分发正确的版本,就完成了


Fontforge相当不错,我敢打赌一旦设置好,你可以在一小时内编辑字体。

你的Helvetica Neue版本有西里尔文的字形吗?如果不是,那么你会得到字体回退,俄语使用的字体事实上不是Helvetica Neue,而是其他的,其他指标。 如果你使用中文,你会得到更多的信息,因为Helvetica Neue绝对不包含中文字形:-)


另一方面,真的真的考虑了TLF。这对于国际支持来说要好得多,FlashPlayer10.0(引入TLF)已经有2.5年的历史了。试着说服你的客户,要求使用古老技术的高水平国际排版是不合理的。这是一个非此即彼的交易。

您是否尝试过简单地修改字体以适应1px左右。简单地把字母向上(或向下)移动,我并没有完全阅读每个人写的所有内容。虽然我目前没有安装它,但我相信我对编辑器的偏好是“Fontlab”。

您尝试过使用固定宽度字体吗?

否。该项目需要向后兼容,因此TLF文本字段不是一个选项。我在字体格式方面也遇到过类似问题,通常是我的字体文件。如果你能从另一台计算机上得到相同的字体,我会先试试,或者换一种不同的字体(看看它是否只是一个乱七八糟的字体文件)。这是我的客户从Adobe购买和下载的原始字体包。因为这个包的价格在600美元左右,我真的不想再买一次,再拿一个样品来比较。。。我已经用许多字体工具对包的有效性进行了三次检查,没有一个显示出任何错误。好的……检查表:您是否对xml文件使用UTF-8(如果您使用xml)?此外,当您嵌入字体时,如果使用font.swf,是否嵌入了西里尔字母的所有unicode字符?你用的是Helvetica Neue还是Helvetica Neue Cyrillic?您是否在舞台上创建了一个新的文本字段,并且至少有一个西里尔文字符?这些字体的静态文本是否也会发生同样的情况?还有,你有人工智能吗?在AI中使用字体,然后导出SWF和PDF时会发生什么情况?在这种情况下,IDE视图和二进制文件中的问题都是一样的。谢谢你的建议,但我一直在寻找一种省时的方法,不必手动移动替换的文本字段