我有一系列包含位图和文字的动画片段。 在应用了一些3d变换并在3d空间中移动后,我的文本和位图会略微模糊。这是我重置所有3d坐标后(即z = 0,rotationX = 0,rotationY = 0) 有人遇到过这种情况么?是否有解决方案可以恢复我的清晰文本和位图?
答案 0 :(得分:2)
这是一个非常有趣的错误。
出现的模糊实际上是不正确的抗锯齿或平滑,通常通过沿着边缘渲染具有精细颜色的字体来解决。在这种情况下,它实际上是由3D变换引起的,可以通过在动画之后使matrix3D
无效来解决:
myTextContainer.transform.matrix3D = null;
你也可以写:
myTextContainer.transform.matrix = new Matrix();
但是使用这种方法,您必须导入flash.geom.Matrix
。
这两个选项也会将x
和y
坐标以及可能的动画显示对象的其他重要设置重置为零,因此您还必须将这些值分配给变量并在使变换矩阵无效后重新应用它们。
似乎一旦字体被转换,它就会失去这种精细的色彩着色。非变换字体具有这些颜色细节,而变换后的字体变得完全去饱和。
附件是12点字体的放大细节,表现出这种颜色细节的损失。顶部字符串没有3D转换,而底部字符串通过rotationY
动画到舞台上。
这是饱和到90%的相同图像,以更清楚地显示颜色:
这些颜色细节在灰色文字上更容易看到。
我相信自Flash Player 9 / AVM2首次推出以来,此错误一直存在。另外,在Flash播放器的早期版本中,正确渲染字体周围的精细颜色细节更加饱和,在我看来,这使得字体看起来更好 - 尽管与我不同,非完美主义者可以认为这种差异可以忽略不计。 / p>
答案 1 :(得分:1)
您需要确保在已应用3D转换的任何对象上将matrix3D属性设置为null。
答案 2 :(得分:0)
查看关于3d问题的另一篇文章并遇到了解决方案。 您需要通过应用新的transfrom.matrix删除所有三维转换
var tempMatrix:Matrix = new Matrix(); this.transform.matrix = tempMatrix;
答案 3 :(得分:0)
更好的答案是使用此修复程序。这是我以前经常使用的那个。
/**
* Fixes the slight distortion that occurs when an object has a 3D transform associated with it.
* @param di:DisplayObject The DisplayOjbect to fix.
*/
public function fix3DBlur(di:DisplayObject):void {
di.scaleX = di.width / (di.width - 1);
di.scaleY = di.height / (di.height - 1);
}
此函数设置略微偏移的scaleX和scaleY。这看起来很奇怪,但是当你使用任何3d属性对对象进行3d调整时,它们会使它看起来不模糊。您可以随时删除3DTransform,但有时您需要将其保留在原位。
我将此函数放在我拥有的Utilities3D类上。