Flash as3 水平动画flash移动动画

常用flash引擎和框架
- as3 delphi - ITeye技术网站
博客分类:
官方在线帮助(没标英文的都是中文) 用于 Adobe Flash Platform 的 ActionScript 3.0 参考 16种语言(使用这样的链接下载离线版/xx_XX/FlashPlatform/reference/actionscript/3/PlatformASR_Final_xx-xx.zip) 用于 Adobe Flash Professional CS5 的ActionScript 3.0 参考 使用 Flash Professional CS5 使用 Flash Builder 4 Adobe Flex 4.1 语言参考 ActionScript 3.0 开发人员指南(这个一定要仔细看完) 使用Flex 4(英文) Flex 的 Adobe AIR 开发人员中心-快速入门 Flash Media Server 4在线文档(英文) Flash 3D(FlashPlayer11加入原生3D后的更多资料) native3D 来自 比起其他3d引擎动辄几百k,无位图资源时,只有3k+的native3d引擎在做一些轻量级的网页效果时,它甚至比five3d的体积还要小,确实有它一定的优势。 Away3d /p/away3d/ / Sandy ActionScript 3D引擎,有AS2、AS3、haXe版 Alternativa 3D ASCOLLADA 一个可以解析Collada文件格式的AS3类库,Collada 是一个开放原始码的专案,它可让3D资料以XML的型态储存,并让3D人员可以轻易携带和互换资料 Five3D Papervision3D(很久未更新,不支持新的3DAPI,zrong不推荐使用) /p/papervision3d/apervision3D是由巴西人Carlos差不多凭自己一人之力(后来的版本应该多了很多contributor)开发,目前应用比较广泛。主要特点: 可以直接导入dae和ase文件(这些文件你用3DMAX或其他3D工具安装一个小插件就可以导出的了),这意味着可以直接使用大部分专业3D工具制作出来的模型。 性能好 功能强,现在已经支持很多振奋人心的高级3D效果了,不知道最终版本会变成怎样呢 使用简单。基本上看一看例子就知道怎么做了 开源。 有兴趣的可以先到下面这页面看看PV3D的例子 http://blog.davr.org/pv3d-examples/ 官方网站:http://www.papervision3d.org/ 博客:http://blog.papervision3d.org 下载页面:/p/papervision3d/downloads/list Flash物理引擎 APE (Actionscript Physics Engine) The Fisix Engine 不开源,但文档和示例比较齐全,zrong也用的就是这个 Box2DFlashAS3 脱胎自C++引擎,强大且复杂 FOAM Rigid Body Physics Engine Motor JigLib 3D物理引擎 WOW Engine 3D物理引擎 Flash游戏引擎(参考来源:1|2) PixelBlitz Engine这个引擎提供位图管理、碰撞检测、像素字体、游戏相关数学计算、键盘和鼠标管理等等功能。但它是一个未完成版本,它的开发者现在都去开发Flixel Power Tools了。 flixel 这是一个全位图引擎。所谓全位图,就是游戏场景中所有元件最终均绘制在一个位图对象上,在游戏过程中每帧进行重绘。也正因为如此,此引擎非常擅长处理同屏同时出现大量的游戏元件,其高效的渲染会让你激动不已。当你需要创建2D卷轴游戏或者场景中需要大量运动元素的游戏,Flixel引擎是你的首选。 Flixel还具有一些不错的特性: 采用QuadTree的对象链,高效的碰撞检测 位图动画Sprite 通过文本及图片创建Tiles地图 简单易用的粒子系统 高效的滚屏 自定义的鼠标光标 方便的debug显示终端 典型案例: Canabalt该游戏在作者的网站上每月会消耗2.5T的流量,可见流行的程度。游戏中高速流畅的滚屏会让你惊叹Flash的效率。此游戏还移植到iOS上,并在App Store中销量不菲。 Omega Crisis 这个塔防类游戏,画面、游戏性与操作性都相当不错。 用此引擎的游戏展示 简单介绍|功能列表|中文教程 Flixel Power Tools 在Flixel的基础上加入了一些工具。 Bold Pixel engine 以copyPixels方法写的位图引擎。里面实现了缓存BitmapData贴图管理等优化,不过没有对不在显示区域的对象进行过滤,以及其它优化。 FlashPunk FlashPunk同样是个针对位图的开源引擎。它具有清晰的框架以及创建游戏需要的动画、碰撞等类库,让开发者更专注与游戏的设计与测试中。 其主要特性包括: 相对独立与固定的帧频时间步长控制 像素、矩形区及网格的碰撞检测 运动tweening sorted的渲染列表,方便深度排序 粒子系统 典型案例: Tiny Hawk类似超级玛丽,不过这次你脚下踩着的是滑板,一共32关。 Mr. Fat Snake贪吃蛇的横轴飞速版。:) 更多采用此引擎的游戏展示 pushbuttonengine 简单介绍,Pushbutton引擎的特色有很多,包括建立游戏的模块片段,而不是整体式的应用;使用第三方类库更加容易;提供核心功能比如资源管理器、日志管理、调试检测、序列号、时间管理、全局命名对象等等;相关的组件包括基于Box2D的物理引擎、Rendering2D引擎、游戏常用的健康值组件、团队组件、状态机组件、贴图系统、路径查找类库、基本的网络联机和通讯服务; 将来会提供编辑器,以及网络联机组件,这两个组件都是收费组件; 该游戏引擎的官方网站还列出了组件商店的介绍,作为该组织出售组件和广大开发者出售组件的场所,这不失为一个好的商业模式。 典型案例: Social City这个在Facebook上月活跃用户超过一千万的游戏,采用了PushButton引擎。 The Incredible Machine Mega Pack不可思议的机器系列想必大家不陌生,这个版本的近400兆大小的单机游戏也出自该引擎。 mecheye-as3-libraries 作者可能已经放弃开发了,zrong不推荐使用 下面是一些2.5D游戏引擎。所谓2.5D,我们也称之为Isometric,也就是游戏视角采取倾斜视角(如斜45度角等),以平面的方式展现固定视角的3D效果。目前很多网页游戏均采用2.5D的方式。需要注意的是,前面为大家介绍的位图2D引擎同样可以用来开发2.5D游戏。运用这些引擎,你可以把一些烦人的2.5D相关的坐标转换交给引擎处理,专注在你的游戏逻辑及设计上。 AS3 ISO LIB As3isolib是一个基于ActionScript 3的 Isometric库,开发者运用它可以方便的开发2.5D的游戏或应用。其主要特性包括: 简易的2.5D场景创建方式 方便的于各种缓动(tween)引擎交互 增强的2.5D元件深度排序 场景显示渲染的性能优化 典型案例: Zex Lex DuelFacebook上的一个机器对战小游戏。 Down TownFacebook上的虚拟城市交友。 另外,还有开发者将这个2.5D的库制作成 PushButton引擎的一个组件 OpenSpace OpenSpace是一个非常不错的引擎,用户可以非常快速方便的创建2.5D游戏。配合该公司的另外一款通信服务器SmartFoxServer,可以搭建多人实时交互的虚拟场景。 其特点包括: 完善的地图编辑方式 可缩放的场景 自定义地图滚屏方式 自定义的游戏角色 地图自动寻径 典型案例: The Settlers–My City殖民者的网页版,你可以创建属于自己的殖民国 。 Petpet Park很可爱的宠物公园虚拟社区。 更多的案例展示 TheoWorlds TheoWorlds 除了包含Iso引擎之外,还包含聊天、地图编辑器等组件,可以帮助开发者快速的开发2.5D的虚拟世界。 主要特性有: 8方向的运动角色 自定义角色形象 自定义角色动作 快速寻径及自动滚屏 与SmartFox Server及ElectroServer等第三方即时通信服务器通信 聊天历史、表情图标等 相关演示: 场景演示 地图编辑器演示 FFlimation 这个项目的主要目的是提供一个稳定的开发平台,这样游戏设计师就可以忘记游戏渲染引擎把精力集中在游戏内容的细节方面。从“关卡制作”的角度来看,这个引擎的可用性非常的高。 Citrus Engine Citrus 引擎是一种基于as3和box2d的flash滚屏平台游戏引擎。Cirus引擎能让设计师和开发者非常快速的容易的创建滚屏平台游戏(又叫横版过关游戏)象超级玛丽。团队可以用citrus引擎给游戏门户制作广告游戏,市场推广游戏,搏逸游戏等等。 Yogurt3D Yogurt3d的核心部分,swiftgl,是开源并且与opengl兼容。这意味着有opengl开发经验的开发者很容易的就可以开发出3d flash游戏和应用程序。他还可以轻易的将opengl代码转化成swiftgl并在flashplayer中运行。 UI组件与布局管理 Flash UI Component 基于Flash CS3的UI组件,可用于纯ActionScript项目。 AsWing AsWing是一套UI组件框架,纯ActionScript开发的组件框架(有ActionScript2和ActionScript3版本),也包含一些常用的工具类,目的是让Flash/Flex开发人员方便的开发出想要的应用程序界面。另外AsWing还提供SkinBuilder和GuiBuilder工具用于制作Skin和可视化编辑生成界面。目前AsWing团队专注于ActionScript3版本的开发和维护。AsWing以 BSD协议发布,不管你是商业还是非商业,都可以自由免费使用. zrong最近就在用AsWing做东西。看完AsWing的架构才发现,Flex4的spark组件引以为傲大肆宣传的layout,其实AsWing早就这么做了。 不过,最近zrong在用AsWing开发的时候,又碰到过许多莫名其妙的问题,找不到什么解决方案,目前已经放弃。 Gfl 一个轻量级的基于纯AS的独立组件库,可以使用CSS语法。感谢smithfox的推荐。 Minimal Comps 一套小巧可爱的纯AS组件,除AsWing外的又一选择。zrong发现纯AS的UI组件并不多,貌似除了AsWing也就只有这套了。中文使用说明 Skinnable Minimal Components MinimalComps的官方版本是不支持皮肤的,而这个就是它支持皮肤的版本。 razor components 一套支持皮肤的纯AS组件。 MadCommponents 一套轻量级的纯AS组件,适合用在移动设备上。 AS3Flobile 这一套也是比较轻量级的 Base UI 纯AS实现的布局框架,功能很全,配合Minimal Comps再好不过了。快速查看布局效果 miniui 这是一个开源的flash ui 框架。支持主流框架的skin和layout等功能,但是体积却非常小。 FlexLib 一套包含很多FLEX高级组件的开源类库。包含这些组件:AdvancedForm, Base64Image,EnhancedButtonSkin, CanvasButton, ConvertibleTreeList, Draggable,Slider, Fire, Highlighter, HorizontalAxisDataSelector ImageMap,PromptingTextInput, Scrollable Menu Controls, SuperTabNavigator,Alternative Scrolling Canvases, Horizontal Accordion, TreeGrid,FlowBox, Docking ToolBar 。 FlexMDI 是一个在Flex中轻松创建多窗口(MDI)的一个框架,提供了很多功能,包括拖拽,最大化,最小化,各种效果等。 现在FlexMDI已经整合进入FlexLib组件,成为其中的一个包flexlib.mdi MDIManager介绍 flexmdi中的效果 vancura-AS3-libs 提供纯AS3组件的皮肤和样式的集合。支持Scale9Bitmap BrowserCanvas 提供容易的方式动态修改Flash尺寸大小 senocular Layout class 除了布局工具,还有其他许多有用的工具 Yahoo ASTRA: ActionScript Toolkit for Rich Applications 这是Yahoo开发的一套RIA组件包,包含以下内容 Flash Components Flex Components Utilities Library 包含动画工具Animation Utility和布局工具 Layout Utility 还有几个这里就不介绍了,大家自己看 EnFlash 仅支持AS2 XMCA 仅支持AS2 BIT Component Set 商业组件 $99 GhostWire Components 商业组件 标准版$149 精简版$99 Tween ByteTween TweenLite(TweenMax) TweensyZero gTween AS3 Animation System Go KitchenSync Twease Tweener Tweensy Yahoo ASTRA Animation Utility asinmotion ActionScript3.0 API swfupload 类库 如果想对SWF中的动态文本应用非系统的字体,方法当然是在本身的SWF中嵌入相应的字体,另外一种方法是把字体嵌入到另外的SWF中,当需要对应的字体时,把这个SWF载入,并引用相应的字体。FontLoader是一个字体载入类,它帮助你实现这个过程。 CASALib CASA库是为了简化一些通用的编码而设计,包含collection、display、layout、math、time、load、transitions等包,也有对Tween的实现。 as3corelib 用于AS3开发的一套类库,里面有很多很有用的东西。例如MD5,SHA1加密方法,图片格式转换类(将图片转为位JPG,PNG等格式)还有JSON序 列化等等有用的东西。 FlexUnit Syndication library as3awss3lib ActionScript 3 Amazon S3库 as3soundeditorlib Actionscript 3声音编辑库 as3ds AS3数据结构库,适用于游戏开发 As3Crypto ActionScript 3 加密库 ebay API facebook-as3 在伟大的中国基本上是用不到了 FZip 使用AS3解压zip文件 lastfm-as3 Last.fm是一个音乐网站,这个库让你可以存取Last.fm公开的数据 MapQuest Popforge AS3 audio library allows you to create a valid flash.media.Sound object with your own samples Salesforce Flex Toolkit Twitter AS3 API XIFF XMPP client library Yahoo AS3 APIs 这个上面也介绍过,可以参考上面的介绍 Flare Visualization Toolkit Flare 是一个用来做Data Visualization的 AS3 类库,可以用来实现图表,动画效果等 Adobe官方开源站点 Yahoo maps 的AS3组件 Graffiti Library-ActionScript 3 Bitmap Drawing Library Graffiti 是一个AS3库,可以让你方便地在Flex/Flash/AIR中使用画图功能。 OpenRIA提供的开源Flex/AS3项目 Degrafa 开源的图形框架 ActionScript编辑器 FDT FDT是Flash Development Tool 的简称,是非常优秀的ActionScript编辑器。它不是一个独立软件,而是Eclipse的 一个插件。它支持高级的代码自动完成功能,具有强大的实时错误检测和除错功能,可以导入Flash的帮助文件,实现同Flash一样方便的帮助信息等等。 功能强大,但不是免费的。 SEPY ActionScript Editor 强大的开源AS编辑器,使用python开发。最近一次更新是在日,估计没戏了。 FlashDevelop 小巧免费的AS编辑器,基于.NET开发,启动快速,免费。zrong推荐 调试器来自 评测 Kap Inspect如果你没用过spy工具,你可曾想实时监控swf application的的所有事件? 你可曾想查看swf有没有内存泄漏问题?你可曾想看看到底DisplayObject tree是什么样的?你可曾想查看所有控件的属性,甚至在运行时改一下?来自 ThunderBolt 是个面向ActionScript 2和3的Firebug轻量级记录器扩展,无法使用Firebug的AIR程序,ThunderBolt有ThunderBolt AS3 Console可以使用。 Arthropod 是个面向Flash和AIR开发的调试工具。其易用性非常好,下载后直接就可以使用, 开发者可以在运行期轻松调试应用。 Alcon是面向ActionScript开发者的一个轻量级调试工具,提供直接且快捷的方法来调试任何ActionScript 2或ActionScript 3应 用,无论这些ActionScript是来自于Web浏览器、独立的Flash Player还是AIR运行时都没有问题。 De MonsterDebugger 是个面向Flash、Flex及AIR项目的开源、轻量级的调试器,功能完善,完全使用Adobe AIR开发。 reflexutil是个Flex调试工具,可以在运行时时实改变控件的属性。 Flex Explorer Flex3 Component Explorer Felx2 Component Explorer Style Explorer Style Explorer with Kuler Import Charting Explorer Filter Explorer Style Creator Enhanced Button Skin Explorer Kuler Flex开发框架 Cairngorm 是为方便FLEX开发企业级应用而开发的一个微架构。假如项目比较复杂,需要3个开发员以上来共同开发,Cairngorm是一个最正统的选择(官方推 荐),虽然开始时有点难学。而做小型项目或项目是由你自己一个人开发的话,那就用PureMVC吧。 不过即使开发不使用它,也可以参考它的源码,毕竟Iteration:two的大量企业级应用的design patterns还是很值得学习的。 PureMVC zrong就用这个 ARP MVCS Flest Model-Glue:Flex ServerBox Foundry Guasax Slide Luke Bayes Ali Mills SomaUI 编译与反编译器 部分转自 硕思闪客精灵(商业软件) imperator(商业软件) Action Script Viewer(商业软件) Flasm(自由软件)反编译swf成字节码(bytecode),将修改的字节码再编译成swf。理论上可以反编译任何加密方式的swf,用汇编语言来写ACTION SCRIPT,FLASM能帮你将SWF里面的AS转换成汇编语言,然后你要做的是优化这些代码,最后交由FLASM再把他转回SWF,FLASM的语法与汇编类似,但只能支持到Flash 8。 Flare(自由软件)Flare是一个免费的swf反编译器. 目前最高只支持Flash MX 2004 和Flash 8。 swfparser(开源软件)一个 Java 编写的简单的用来反编译 swf 的工具,只支持到Flash 8。 swftools是一个方便,易于使用的实用程序收集专门设计,使您与Adobe的Flash文件(SWF文件)工作变得更容易,目前支持Windows和Linux。 PDF2SWF是一个PDF格式到SWF格式转换器。每页生成一帧。使你有完整的格式化文本,包括表格,在你的Flash电影上。它基于PDF格式的解析器。结合FlexPaper可以实现类似Baidu文库/豆丁网的Flash文档阅读器,不过要达到上面两种一样应用还需要不少改进 SWFCombine工具插入一个对pdf2swf转成文件的显示封装。 (模板)例如见,包括在一些浏览SWF的排序pdf2swf。 SWFString搜索出SWF里的文本数据。 SWFDump列出有关swf文件里的各种信息如:Sprite, Shape, String等。 JPEG2SWF添加一个或多个JPEG图片,并产生一个SWF幻灯片。 PNG2SWF 同JPEG2SWF相似,支持png格式。 GIF2SWF转换的GIF到SWF。还能够处理GIF动画。 WAV2SWF WAV音频文件转换为SWF文件,使用的LAME MP3编码器库。 AVI2SWF的AVI动画文件转换为SWF。它支持Flash MX中的H.263压缩。有些例子可以找到examples.html。 Font2SWF转换字体成为SWF文件。 SWFBBox允许调整SWF的封装Viwer。 SWFC的工具,从简单的脚本文件创建的SWF文件。 SWFExtract允许提取影片剪辑,声音,图像等从SWF文件。 RFXSWF 一个功能齐全的Flash库,可用于独立的SWF。包括位图,按钮,形状,文字,字体,声音等的支持,也为ActionScript支持使用明ActionCompiler。 AS3Compile ActionScript 3.0编译器,与官方的Flex SDK 里的mxmlc相比功能很少,你可以输入as3compile –help查看参数 Ming可以用来生成swf文件,包括在swf文件内增加图片,声音,视频等素材,也可以在文件内增加代码,使用滤镜.可以使用php,perl,python,ruby,java生成swf文件,php5安装的时候自带,php5帮助里面用完整的函数说明。 swftophp – SWF to PHP converter makefdb – Font Definition Ripper listfdb – List Font Definition listjpeg – List JPEGs listswf – SWF Disassembler listaction – Actions Script Disassembler png2dbl – PNG convert gif2dbl – GIF converter gif2mask – GIF Mask extractor raw2adpcm – Audio Converter Swfmill是一个功能可靠使用方便的命令行工具,可以使用SWFML实现的xml和swf之间的转换,还可以利用xslt生成swf文件,也是FAMES生成SWF密不可分的一部分。SWFML是一种在SWF文件格式制定后制定的XML语言。 Nemo 440(免费软件)AIR编写的ActionScript 3/ABC2/Flex 2/Flex 3/Flex 4/AIR反编译器,并不能还原成AS文件,只是反编译成类似字节码的代码。 swfdump和swfutils.jar,包含在Flex4 SDK中,swfdump调用swfutils.jar工作,将swf编译成字节码。可以看看这篇文章的介绍。 加密与混淆器一个开源(GNU GPL v2 )的flash反编译器,JAVA编写。 C Preprocessor for ActionScript开源的处理AS源码的混淆器,简单的介绍 asdec Flashincrypt Swf Encrypt Flash Encryption Genius irrfuscator(商业软件)一个AS3源码混淆器。 外壳 mprojector swfKit swfkit打包方面的一些问题可以看这里 ZINC 视频 FLV MetaData Injector Riva FLV Encoder FLVtool2 VH Screen Capture Driver 免费的抓屏驱动,可以配合Flash Communication Server实现屏幕共享 H.264 MPEG AVC Video Codec comparison Flash Video比特率估算 服务器软件 Openfire 使用Java开发聊天和IM服务器,实现了XMPP协议。据说Google Wave的协议也是基于它的,底层使用Apache MINA(下面有介绍)。 Red5 使用Java编写的开源软件,可以用来替代Flash Media Server(原Flash Communication Server) Wowza Media Server 商业软件,又一个FMS替代品,除了RTMP外,还支持多种协议和多种客户端(Silverlight、QuickTime等等) ErlyVideo一个使用Erlang语言编写的FMS替代品,支持HTTP MPEG-TS流、RTMP流和IPhone流。 SmartFoxServer 商业软件。它是专门为Adobe Flash设计的跨平台socket服务器,让开发者高效地开发多人应用及游戏。服务器端可以使用Actionscript, Javascript, Python和Java语言进行扩展。自带数据库和HTTP服务器引擎。 中文介绍 中文文档 QuickServer 它是一个免费的开源Java库,用于快速创建健壮的多线程、多客户端TCP服务器应用程序。使用QuickServer,用户可以只集中处理应用程序的逻辑/协议。 中文开发指南 MINA Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。 Cindy Cindy是一个强壮,可扩展,高效的异步I/O框架。支持TCP,SSL-TCP, UDP和Pipe。 OneTeam Media Server又一个使用Erlang语言编写的开源FMS替代品 来自 支持流式播放实时或已录制好的媒体内容 支持录制实时内容 支持AS3 SharedObject共享对象 支持Clustering集群 支持用Erlang/OTP编写应用程序模块 TightVNC 并非Flash专用,提供远程控制服务 参见FlashVNC vnc2swf 将VNC的内容保存成SWF 开发 FlashTextEditor 一个基于Flash的在线编辑器,内建文件器,非常有趣和强大。但对中文支持不够好。 Flash Text Formatter 基于Flash的语法着色器,支持ActionScript、PHP、JavaScript和Python语法 swfmill swf2xml和xml2swf mtasc 编译为swf SWFObject(原名FlashObject) 将swf嵌入到网页中的JavaScript脚本 SWFObject的用法 基于SWFObject的Flash发布模版 Xray (Flash Debugger) 应用 FlashTextArea Flash Remoting webORB 包含.NET、JAVA、PHP和 Ruby on Rails版本的Remoting。 FluorineFx Flash Remoting for .NET,开源 Zend AMF Zend出品,算是官方支持了。Flash Builder自带了这套框架。 OpenAMF JAVA Flash Remoting rubyamf RubyAMF is an open source flash remoting gateway for rails. It plugs?directly into your controllers with render :amf. amfphp(不推荐) Flash Remoting for PHP,开源 ActionScript 1.0/2.0 AS2 Libiary Flash prototype functions Download all prototype functions in?PDF format ActionScript Class AS2 to AS3
浏览: 46976 次
眼睛都看花了,能否推荐一下目前用得最多的?iOS导入flash矢量图和动画的实现思路
招聘信息:
做软件,经常需要一些小动画。用flash做动画是挺方便的,之后再输出图片帧,但这样产生问题:
1. 动画帧比较大。
2. 假如要同时支持高清屏幕和低清屏幕,图片就需要输出两份。
所以我被要求写一个做2D动画的工具(暂时只用到2D动画)。最开始的想法是重头做一个动画编辑器,类似Unity3d中的插件Smooth Moves。简单说来是将一个角色,分成头,手,脚,等部件。图片导入工具之后,再设置手脚的各个关键帧的位置,非关键帧进行插值。这样就可以解决掉问题1,最开始也只想着解决问题1。
========================================
后来看到论坛文章&cocos2d-x 动画工具 Flash2Cocos2d-x&,/bbs/read.php?tid=115039&page=1,产生想法,直接用flash工具做动画,跟着输出,这样就可以免去一个编辑工具。
之后的一个多星期,就按照文章的思路来做。大概思路是在flash中嵌入as脚本,用as脚本来载入flash,将动画数据输成xml(这样不用分析文件格式)。但这种做法我后来发觉有很大约束。
1. 只能输出图片,不能输出矢量图。
2. 做动画的人需要按照一定的规则,比如需要为每一个元件命名。
3. 只能输出补间动画。
4. 识别不了相同的元件。比如不同角色在同一场景上骑同一匹马,判断不了两匹马是否相同。(如果相同就可以只使用一份数据)
5. 似乎不能输出多层数据。比如人有个头,头上有眼睛,头转成眼睛跟着头动,这样就需要分多层。
最后两个理由我可能说错。我大致看了那代码就开始自己动手了,没有太细看。
========================================
尝试了一个多星期之后,我放弃了用as脚本编程的想法,尽管当时已经可以简单导出动画,但只能基于图片,只有一层。我决定在OS X上写一个转换工具,分析swf格式,将其中的矢量和动画数据转成一种自定义的格式,再提供一个iOS上SDK,读取自定义的格式,之后就可以在iOS上面跑。我试过在ipad上面直接读取swf,会很慢(为什么慢,之后会提到)先在OS X上转一转格式,会快很多。
因为要快,另外我自己觉得用C++分析格式会比object-c方便。除了界面,全部用C++编写。现在渲染部分采用CGContext,应用到CALayer上面,CALayer可以同时在OS X和iOS上面显示,加上应用基于UIView的多,将CALayer加入UIView的layer中,就可以显示了。下一步我打算将渲染过程用opengl改写,就可以支持cocos2d。
========================================
下面说一下,从分析swf格式,到输出自定义格式的过程。
首先,swf格式其实已经有文档描述了,另外也有开源的分析代码,只是很多我都不太喜欢。加上前面已经研究过as脚本,就使用一份as3swf的开源代码,将它改写成C++。swf格式压缩得挺厉害的,可以很小。分析之后,就可以在内存中生成一份对应于swf的结构。swf大致分成一个个tag, 我关心的只是, shape(形状,也就是矢量图),image(嵌入的png和jpg,图片), sprite(动画,当只有一帧的时候,可以当成静态图)
接下来,就需要将swf对应的内存结构,转成我自定义格式对应的内存结构,也就需要分别转换 shape, image,sprite,其中每个定义都有一个Id。Id指明需要引用哪个shape,image或sprite。
swf的shape定义,首先定义出lineStyle数组和fillStyle数组,分别为描边和填充的样式,比如宽度,颜色,渐变填充等等。swf的矢量图描述是基于边的,可以使数据量更小。每条边有个lineStyle索引, (index-1)用于访问数组,表示怎么描边,无描边为0, 一个fillStyle0索引(表示边左边怎么填充,左边无填充为0),还有一个fillStyle1索引(表示边右边怎么填充,右边无填充为0)。
但是我们通常的绘画系统是基于路径的,先定义一个路径,再填充或者描绘路径。这样就需要将swf基于边的描述转成基于路径的描述。其中swf的一条边,可能会被两个路径共用,就需要将边分裂。整个算法在http://rintarou.dyndns.org//how-smokescreen-convert-swf-edges-to-svg-paths/和.br/claus/blog/hacking-swf-1-shapes-in-flash/ 中有初步描述。之后再考虑子路径问题,比如路径A是构成一个圆,逆时针,B包含在A里面,是顺时针,A,B填充颜色都是红色,这样B就是A的子路径,一起考虑,应用奇偶规则,B的内圆是不用填充的,构成一个环形。
整个形状的转换过程其实是比较慢的。用iOS直接读swf,慢就慢在两个情形。一个是层层解压swf, 另一个就是转形状。通过在os x上预先转换,就解决了这个问题。
转这个其实也很简单,就是读取png或者jpeg,或者bitmap数据。导出png保存在文件中。(因为已经可以导出矢量图了,直接使用图片的机会也不多)。要注意的是jpeg本来没有alpha数据,在swf高版本上为jpeg附加了alpha数据,转时要考虑。
这个就是动画数据。swf的动画定义,大致生成三个tag, placeObj, removeObj, showFrame, placeObj定义了要放哪个物体,要放到什么位置,放在那一层。要放的定义用Id表示,放什么位置用矩阵matrix表示,放哪一层用depth表示。removeObj定义了需要删除哪一层上的物体。放完之后showFram,就显示哪一帧。比如
placeObj 1
placeObj 2
showFrame,
removeObj 1
就定义出三帧,第一帧放了1、2两个物体,第二帧保持原状不变,之后删除1,所以第三帧就只显示了2这个物体。swf的这种定义法也要转成容易直接使用的数组形式。
另一个是需要为角色分状态。
每一个sprite是有一个动画序列,需要在动画序列中加个标签来分状态。比如第一帧有标签run, 第10帧有标签stand, 总共有15帧。这样第1到9帧转成状态run, 10到15帧转成状态stand。整个sprite就转成一个role, 有两状态run和stand。导入程序就可以用代码来切换角色的状态。
转成了自定义格式的内存结构,就可以容易输出了。我现在输出两种格式xml和二进制格式。xml格式是调试用的,容易看,但装入慢。bin格式用于真正使用,装入会快很多,也不太。二进制格式数据很小,一个角色,9个状态,也大概90K。另外原先的简单大图,可以压缩到15K。矢量图的文件大小跟绘画的精细度有关,跟图片尺寸没有关系。
用了矢量数据之后,同一份数据可以直接用于高清和低清的ipad,iphone,iphone5。只是现在用CALayer的方式来渲染,显示太过精细的图片会慢点(跟图片尺寸无关系)。我打算加一个图片缓冲的机制,第一次渲染出图片之后,就缓冲起来,下次就可以直接使用了,但这个需要注意删除缓冲的时机。
========================================
因为直接分析swf,做动画的可以编译出swf,用工具来导出。只是暂时还不支持morph shape,就不可以直接使用形变,只能做完之后将形变转成关键帧。现在还不是太完善。
========================================
因为是公司内部工具,不能提供源码。这个实现思路其实无什么秘密可言,论坛上面,网络上面早就有了。连flash player的源码也已经有了。
这里上张截图,左上角是用flash播放器显示的效果,下面是工具的界面。右上角是跑在ipad模拟器的效果。可以看出,现在文字还导不出来。那个小丑其实是个动画来的,并非静态图,图片看不出来。
社区原帖:&&
您还没有登录!请或
点击量9636点击量6605点击量6546点击量6501点击量6060点击量5879点击量5716点击量5613点击量5489
关注微信 每日推荐
扫一扫 浏览移动版
&2015 Chukong Technologies,Inc.
京公网安备89

我要回帖

更多关于 flash移动补间动画 的文章

 

随机推荐