1

SWF 文件格式规范第 19 版说 MATRIX 记录中的比例值存储为 FB,在规范的其他地方它说 FB 是 32 位 16.16 定点值,但是有一个值它使用多少位来存储值,在示例中它是 3.16 值而不是 16.16 值。

  • 怎么可能同时是 32 位 16.16 值和 19 位 3.16 值?
  • Flash Player 如何知道它是 3.16、4.15、5.14、XX 值?
  • FB的格式到底是什么?

我想知道这一点,因为我想将精灵插入到已编译的 SWF 文件中。我已经在该精灵中成功使用了 PlaceObject 标签,但现在我有一个必须按比例缩小的图像,这也在 MATRIX 记录中完成,但首先我不需要 FB,因为另一个图像已经在正确的比例。

编辑:我将尝试明天是否可以使用 Sothink SWF Quicker 制作新的精灵,如果它不起作用,我将尝试使用 Adob​​e Flash CS 6 制作一个包含精灵的简单 swf 文件,然后复制将DefineSprite 标记添加到其他SWF 文件中。如果有人回答,我会先尝试使用十六进制编辑器进行缩放,然后再使用 Sothink SWF Quicker 进行尝试。

edit2:当我尝试导入 SWF 文件时,Sothink SWF Quicker 崩溃。如果从我要创建的 SWF 文件中复制标签不起作用,我将删除我想用 PlaceObject 标签放置的图像,然后按比例重新插入它。

编辑3:我不知道如何让Flash使用DefineSprite标签,所以我添加了一个DefineBitsLossless2标签,图像按比例缩小,我将在sprite中使用这个图像。我现在不再需要 FB,但是知道它们是如何工作的仍然会很高兴,所以如果有人知道,请回答。

4

1 回答 1

1

矩阵记录是这样开始的:

HasScale    UB[1]
NScaleBits  If HasScale=1, UB[5]
ScaleX      If HasScale=1, FB[NScaleBits]
ScaleY      If HasScale=1, FB[NScaleBits]
...

FB[NScaleBits] 确实是一个定点值,但不一定是 16.16 - 这一切都归结为 NScaleBits(因此它不同于常规的定点数,它始终为 16.16)。

使用的位数是固定的或预先指定的,就像 Matrix 一样,所以 Flash Player只知道.

例如,如果 dex 中的 0x28000 为 2.8,在这种情况下 NScaleBits 为 19,因为我们需要最少 3 位来表示有符号数“2”(3 + 16 = 19)。

我知道这是一个老问题。不过,有人可能会像我一样偶然发现它。

于 2014-05-21T09:08:15.707 回答