生成一个swf文件,Display list (下)
来源:互联网 发布:如何起诉装修公司 知乎 编辑:程序博客网 时间:2024/06/08 17:29
000000 46 57 53 03 4F 00 00 00 78 00 05 5F 00 00 0F A0
000010 00 00 0C 01 00 43 02 FF FF FF BF 00 23 00 00 00
000020 01 00 70 FB 49 97 0D 0C 7D 50 00 01 14 00 00 00 这一行的开始,到有背景
000030 00 01 25 C9 92 0D 21 ED 48 87 65 30 3B 6D E1 D8 色部分的结束是shape
000040 B4 00 00 86 06 06 01 00 01 00 00 40 00 00 00 的"body"部分 35bytes
接下来是一个新的类型(用深色的背景,换颜色表示一个项目完了)。继续看格式定义:
项目
类型
说明
FillStyles
FILLSTYLEARRAY
有关填充样式的数组
LineStyles
LINESTYLEARRAY
有关线条样式的数组
NumFillBits
UB[4]
fill index使用的bits数。参考后面
NumLineBits
UB[4]
line index使用的bits数。参考后面
ShapeRecords
SHAPERECORD(一个或多个)
参考后面
第一项FILLSTYLEARRAY00 ......唉,查!
项目
类型
说明
FillStyleCount
UI8
FillStyles是一个数组,这一项表示数组有多少个元素
FillStyleCountExtended
如果FillStyleCount的值是0xFF UI16
如果元素数多于127个的话,用这一项表示来表示
FillStyles
FILLSTYLE[FillStyleCount]
填充样式的数组
在这个例子里边FillStyleCount = 0,所以后面没有任何内容。
第二项LINESTYLEARRAY01 14 00 00 00......唉,再查!
项目
类型
说明
LineStyleCount
UI8
LineStyles是一个数组,这一项表示数组有多少个元素
LineStyleCountExtended
如果LineStyleCount的值是0xFF UI16
如果元素数多于127个的话,用这一项表示来表示
LineStyles
FILLSTYLE[FillStyleCount]
线条样式的数组
这里LineStyleCount = 1说明有一个LineStyles。那就要要看看LineStyles数组的元素拉:
项目
类型
说明
Width
UI16
线条的宽度
Color
RGB/RGBA
线条的颜色,如果是shape1,shape2则为RGB;如果是shape3的话是RGBA,A是Alpha
这里宽是 20 twips 1像素,DefineShape tag表示了这是shape1(另有DefineShape2,DefineShape3请参考样式书),所以颜色是0,黑色。
回到SHAPEWITHSTYLE的下一项01 NumFillBits 0,NumLineBits
接下来是ShapeRecords 25 C9 92 0D 21 ED 48 87 65 30 3B 6D E1又是一个新类型,而且比较复杂。可以有四种:ENDSHAPERECORD,STYLECHANGERECORD,STRAIGHTEDGERECORD,CURVEDEDGERECORD。
ENDSHAPERECORD定义了一个ShapeRecords 的结束。
STYLECHANGERECORD定义了填充样式,线条样式,位置的变化等。
STRAIGHTEDGERECORD 和 CURVEDEDGERECORD 分别定义了直线的边和曲线的边(在flash中的shape是矢量图形,有关矢量图形,建议参考一下SVG标准,我的书签中有一个链接)
我真的不想看下去了!我就找个借口请想看的人自己看下去吧。总之,这些打着背景色的数字定义了一个图形,的id是1,至于图形是什么,数据量有多么大,和下面的部分无关。
接下来是一个控制块,还记得三部曲吗?这是第二步。(发表的日志最后一部分变成了乱的,导致心情不好。我也要偷工减料)。
86 06 是tag header 拆出来的结果是 0x0686 = 0000 0110 10 00 0110前面的10位表示类型26是PlaceObject2,这是一个短格式,长度用后6位表示是 6 bytes。
PlaceObject2的格式定义如下(偷工减料就在这里了,直接考了~~~~大家E文都蛮好,无所谓咯)
Field Type Comment
Header RECORDHEADER Tag type = 26.
PlaceFlagHasClipActions UB[1] 是否包含剪辑动作
SWF 5 or later: has clip
actions (sprite characters
only).Otherwise: always 0.
PlaceFlagHasClipDepth UB[1] 是否包含mask深度。
PlaceFlagHasName UB[1] 是否自定义名称
PlaceFlagHasRatio UB[1] 是否含有比例(补间)
PlaceFlagHasColorTransform UB[1] 是否含有颜色转换
PlaceFlagHasMatrix UB[1] 是否含有转换矩阵
PlaceFlagHasCharacter UB[1] 是否含有需要现实的对象
PlaceFlagMove UB[1] 对象是否移动(补间)
下面有一些不一定有,如果上面的标志位是0,则没有相应的项(看颜色)
Depth UI16 深度.
CharacterId UI16 需要显示的对象ID
Matrix MATRIX 转换矩阵.
ColorTransform CXFORMWITHALPHA 颜色转换.
Ratio UI16 比例
Name STRING 自定义名称.
ClipDepth UI16 mask深度
ClipActions CLIPACTIONS 剪辑动作的脚本数据.
06 是PlaceObject2的8个标志位,组成一个字节。有关这些标志位的意义请参考样式书。
01 00 表示深度是 1
01 00 表示需要放入display list的对象id是 1
00 表示的是一个转换矩阵,00说明这个矩阵是空的,即没有位移,缩放或者旋转。
剩下还有一点儿,40 00 是ShowFrame tag,一个只有tag header的control块。它的类型是1。最后是00 00的 end tag,它的类型是0。
现在可以回顾一下了:我见到字典了吗?没有。字典是一个player维护的表,在swf中只是概念性的,所以我需要注意,也是我能注意的只是给每一个定义分配唯一的id标志。display list也一样,是一个概念。
流程也很清楚了:定义,控制,ShowFrame,等待下一贞(由贞频决定等待的时间)。
压缩是一个问题,不过对程序员来说不是。如果你是java程序员,一定不会对java.util.zip包陌生。而swf采用zlib压缩,那个包正好拿来就用。只是注意不要连swf文件的header一起压缩了就好了,最后还不要忘了把第一个字节该成C
- 生成一个swf文件,Display list (下)
- 生成一个swf文件,Display list(上)
- php生成swf文件的一个简单例子!!!
- ubuntu下播放 .swf文件
- SwfTools pdf2swf 每页生成一个swf
- 清除Firefox下Flash(swf文件)缓存
- 五种php生成swf 文件代码
- 制作一个Flex AIR 程序调用 可执行程序(mxmlc.exe) 并且 生成.as文件并编译为.swf文件
- 预加载一个SWF文件详解
- PHP下解析swf文件头
- 搞定ubuntu下swf文件播放问题
- Windows 下批量生成 SWF 缩略图的快速解决方案
- Windows 下批量生成 SWF 缩略图的快速解决方案
- 用程序生成swf(flash)文件: ming 和 swftools
- 解析swf文件的音频数据并生成mp3
- 如何清除flex builder 3 生成的swf文件
- 改变flex生成的swf文件深蓝色背景
- AS3 动态生成swf文件 很牛叉 可惜是日语
- NSDate时间操作
- 设备坐标和逻辑坐标
- ssh ProxyCommand
- 使用 XStream 把 Java 对象序列化为 XML
- include与jsp:include与s:action与s:include与iframe用法汇总(转)
- 生成一个swf文件,Display list (下)
- 使用ASP.NET AJAX的注意事项
- Symbian编程与开发环境设置
- Silverlight.XNA(C#)跨平台3D游戏研发手记:(四)SLG无限自由之过场动画
- ASP.NET控件命名规则
- 生成一个swf文件,Display list(上)
- 单片机接收模块FIFO的写法
- ASP.NET刷新页面的六种方法
- WinRAR 4.01 key!注册文件 注册码