XFL的边缘定义中非数字值的含义是什么?

12

XFL是未经压缩的ADOBE FLASH(CS5)源文件,它由XML定义组成,其中大部分都很清晰,但不幸的是重要的定义却很奇怪。

查看各种现有资源,我可以看到形状的边缘定义,例如:

<Edge strokeStyle="1" edges="!0 0S4|180 0"/>
<Edge strokeStyle="1" edges="!2720 2720S6|0 2720!0 2720|0 0!0 0/2720 2720"/>
<Edge fillStyle1="1" edges="!3532 1539.5S2[#BD9.4D #577.3C 2952.5 1756.5!2952.5 1756.5[#AF6.DA #4C6.1D 3584 1119!3584 1119|3532 1539.5"/> 

通过进行一些测试,我可以说:

! == move to position
| == draw line from the position to the new position
/ == probably same like |
[ == draw curve
( == probably same like [

但是像S4#BD9.4D这样的值是什么意思呢? 我还没有证实,但是我猜测#值可能是编码非常小的数字。我不知道S4可能代表什么。

2个回答

12

!(x,y) moveTo

/(x,y)+ lineTo

|(x,y)+ lineTo

[(x1 y1 ex ey)+ curveTo (quadratic)

](x1 y1 ex ey)+ curveTo (quadratic)

((pBCPx pBCPy)? ; x1 y1 x2 y2 ex ey (({Q,q,P,p})? x y)+ curveTo (cubic start)

)(nBCPx nBCPy)? ; curveTo (cubic end)

Sn selection (n=bitmask, 1:fillStyle0, 2:fillStyle1, 4:stroke)

#aaaaaa.bb 是一个带符号的固定点32位数字


“|”和“/” lineTo 之间有什么区别? - Oldes
我知道这是一个老问题,但你在哪里找到这些信息的,有规范吗? - Demurgos
@Demurgos 我可能有或可能没有访问内部文档的权限。据我所知,没有官方规格说明书(但我的知识可能过时,我不确定)。 - Claus Wahlers
@ClausWahlers 谢谢您的快速回答。有点不幸的是,没有规范(即使非官方来源也几乎没有帮助)。 - Demurgos
确实是一个非常老的问题,但也许有人知道。为什么边缘有时既有fillStyle0又有fillStyle1?这样做的预期结果是什么? - Marcin Zukowski
显示剩余4条评论

0

嗯...我的猜测关于#数值是错误的!

我已经反编译了生成的形状,并且可以确定,例如值#BD9.4D必须是数字3033.77的一个愚蠢的十六进制编码。 我想知道,为什么Adobe在应该易于阅读的代码中使用这样的编码方式?

编辑: 上述内容不正确,#BD9.4D的正确结果是3033.30078125

>> (to integer! #{000BD94D}) / 256
== 3033.30078125

还要注意,像#19F.2这样的数字是二进制#{00019F20}

根据值的S4类型,它们可能只是FLASH编辑器的一些附加信息,因为当我手动删除它们时,我可以加载源代码并且形状相同。


2
他们使用奇怪的十六进制表示法表示那些无法以十进制实数形式表示而不产生误差的值。 - Claus Wahlers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接