Flash 扩展开发

  1 //var dom = fl.getDocumentDOM();
  2 //var fileName = dom.name.split(".fla").join(".swf");
  3 //var swfFile = fl.configURI + "WindowSWF/" + fileName;
  4 //dom.exportSWF(swfFile, true);
  5
  6
  7
  8 cls();
  9 fl.reloadTools();
 10 fl.getDocumentDOM().save();
 11 trace("重新记载工具栏OK");
 12
 13 trace(fl.getDocumentDOM().library);
 14
 15 /**********************************************************************************************/
 16 //功能性函数
 17
 18 /*给函数原型增加一个extend函数,实现继承*/
 19 Function.prototype.extend = function(superClass){
 20     if(typeof superClass !== 'function'){
 21         throw new Error('fatal error:Function.prototype.extend expects a constructor of class');
 22     }
 23
 24     var F = function(){}; //创建一个中间函数对象以获取父类的原型对象
 25     F.prototype = superClass.prototype; //设置原型对象
 26     this.prototype = new F(); //实例化F, 继承父类的原型中的属性和方法,而无需调用父类的构造函数实例化无关的父类成员
 27     this.prototype.constructor = this; //设置构造函数指向自己
 28     this.superClass = superClass; //同时,添加一个指向父类构造函数的引用,方便调用父类方法或者调用父类构造函数
 29
 30     return this;
 31 };
 32
 33 /*打印输出*/
 34 function trace(str){
 35     fl.outputPanel.trace(str);
 36 }
 37
 38 /*清屏*/
 39 function cls(){
 40     fl.outputPanel.clear();
 41 }
 42
 43 /** 保留小数 */
 44 function formatNumber( num, retain){
 45     retain = retain || 100;
 46     return Math.round(num * retain) / 100;
 47 }
 48
 49 /** 把一个库目录里的资源转换为资源的绝对目录 */
 50 function getFilePathByLibraryPath( path ){
 51     if( path == null || path == "" || path == undefined ){
 52         alert( "getFilePathByLibraryPath 无效的参数" );
 53     }
 54     var lib = fl.getDocumentDOM().library;
 55     var item_index = lib.findItemIndex( path );
 56     if( item_index < 0 ){
 57         alert( "此路径不存在: " + path );
 58     }
 59     var item = lib.items[item_index];
 60     var url = item.sourceFilePath;
 61     url = url.replace( "file:///", "" );
 62     url = url.replace( "|", ":" );
 63     //for ( var i in item ){ 64         //trace( " " + i + " " + ":" + item[i] );
 65     //}
 66     //trace( "转换路径 " + path + "===>>" + url );
 67     return url;
 68 }
 69
 70 /**
 71  @brief 获取当前文档的时间轴
 72  @return Timeline object
 73  */
 74 getCurrentTimeline = function(){
 75     try{
 76         return fl.getDocumentDOM().getTimeline();
 77     }catch(e){
 78         alert( "打开 Fla 文件失败" );
 79     }
 80     return null;
 81 }
 82
 83 /**
 84  @brief 判断一个帧是否是关键帧, 原理是每个关键帧总是一序列帧的第一帧
 85  @param frame:Frame object 帧对象
 86  @param frameIndex:int 该帧的索引号
 87  @return boolean
 88  */
 89 isKeyFrame = function( frame, frameIndex ){
 90     if( !frame ) return false;
 91     if( frame.startFrame == frameIndex ){
 92         return true;
 93     }
 94     return false;
 95 }
 96
 97 /**
 98  @brief 把某个图层的关键帧枚举出来
 99  @param layer: Layer object 图层对象
100  @param startFrameIndex:int 起始帧数,不一定是从0开始
101  @param endFrameIndex:int 结束帧数
102  @return vector<int>: 范围[startFrameIndex,endFrameIndex)之间的关键帧索引号数组
103  */
104 getKeyframeIndices = function(layer, startFrameIndex, endFrameIndex){
105     if( !layer ) return [];
106     var list = [];
107     for (var frameIndex=startFrameIndex; frameIndex<endFrameIndex; frameIndex++){
108         var frame = layer.frames[frameIndex];
109         var isFirstFrame = (frameIndex == startFrameIndex);
110         var isKeyframe = (isFirstFrame || frame.startFrame == frameIndex);
111     //    if (isKeyframe){112     //        list[frameIndex] = true;
113     //    }else{114     //        list[frameIndex] = false;
115     //    }
116         if( isKeyframe ){
117             list.push( frameIndex );
118         }
119     }
120     return list;
121 }
122
123 /**
124  @brief 获取某个图层的所有关键帧
125  @param layer:Layer object 图层对象
126  @return vector<Frame object>
127  */
128 getKeyframeObjects = function( layer ){
129     if( !layer ) return [];
130     var list = [];
131     var index = 0;
132     for each( frame in layer.frames ){
133         if( frame.startFrame == index ){
134             list.push( frame );
135         }
136         index++;
137     }
138     return list;
139 }
140
141 /**
142  @brief 获取一个帧上的所有元素
143  @param frame:Frame object 帧对象
144  @return vector<Element object> 该帧上的所有元素
145  */
146 getElementObjects = function( frame ){
147     if( !frame ) return [];
148     return frame.elements;
149 }
150
151 /**
152  @brief 获取元素的类型
153  @param element:Element object 元素对象
154  @return string 类型
155  */
156 getElementType = function(element){
157     if (!element) return '';
158
159     var elementType = '';
160     var libraryItem = element.libraryItem;
161     // element.elementType: "shape", "text", "instance", or "shapeObj"
162     // item.itemType: "undefined", "component", "movie clip", "graphic", "button", "folder", "font", "sound", "bitmap", "compiled clip", "screen", and "video".
163     switch (element.elementType){
164     case 'shape' :
165         {
166             //NOTE: a drawing object is both a group and a drawing object, so check it first
167             elementType = element.isRectangleObject ? 'rectangle object'
168                         : element.isOvalObject ? 'oval object'
169                         : element.isDrawingObject ? 'drawing object'
170                         : element.isGroup ? 'group'
171                         : 'shape';
172         }break;
173     case 'shapeObj' :
174         {
175             elementType = 'shape object';
176         }break;
177     case 'text' :
178         {
179             elementType = 'text';
180         }break;
181     case 'instance' :
182         {
183             if (element.symbolType)
184                 elementType = element.symbolType;
185             else if (libraryItem.itemType && libraryItem.itemType != 'undefined')
186                 elementType = libraryItem.itemType;
187         }break;
188     }
189     return elementType;
190 }
191
192 /** 精减小数 */
193 roundToTwip = function(value){
194     return Math.round(value*20) / 20;
195 }
196
197 /** 获取元素的x坐标 */
198 getX = function(element){
199     return roundToTwip(element.transformX);
200 }
201
202 /** 获取元素的y坐标 */
203 getY = function(element){
204     return roundToTwip(element.transformY);
205 }
206
207 /** 设置元素的x坐标 */
208 setX = function(element, x){
209     element.transformX = x;
210 }
211
212 /** 设置元素的y坐标 */
213 setY = function(element, y){
214     element.transformY = y;
215 }
216
217
218
219 /**********************************************************************************************/
220
221
222
223
224
225
226
227
228 /**********************************************************************************************/
229
230 //Class HSTexture
231 HSTexture = function( oElement ){
232     this.imageName = oElement.libraryItem.name;
233     trace("HSTexture @ imageName : "+ this.imageName);
234 }
235
236 //Class HSNode
237 HSNode = function( oElement ){
238     if(!oElement){
239         return;
240     }
241     this.fX = oElement.x;
242     this.fY = oElement.y;
243     this.fZ = oElement.depth;
244     this.fW = oElement.width;
245     this.fH = oElement.height;
246     this.fScaleX = oElement.scaleX;
247     this.fScaleY = oElement.scaleY;
248     this.fSkewX = oElement.skewX;
249     this.fSkewY = oElement.skewY;
250     this.fRotation = oElement.rotation;
251 }
252
253 printList = function( infoList , strDescribe ){
254
255     strDescribe += "Info: ";
256     var info = strDescribe;
257     for(var i = 0; i< infoList.length;++i){
258         info += infoList[i];
259     }
260     trace(info);
261 }
262
263 printNode = function( oHSNode ){
264     trace("obectName : " + oHSNode.obectName);
265     trace("fX : " + oHSNode.fX);
266     trace("fY : " + oHSNode.fY);
267     trace("fZ : " + oHSNode.fZ);
268     trace("fW : " + oHSNode.fW);
269     trace("fH : " + oHSNode.fH);
270     trace("fScaleX : " + oHSNode.fScaleX);
271     trace("fScaleY : " + oHSNode.fScaleY);
272     trace("fSkewX : " + oHSNode.fSkewX);
273     trace("fSkewY : " + oHSNode.fSkewY);
274     trace("fRotation : " + oHSNode.fRotation);
275 }
276
277 //Class HSDevice
278 HSDevice = function(strDeviceName ,strShowType, iScreenW , iScreenH){
279     this.sName = strDeviceName;
280     this.sShowType = strShowType;
281     this.iWidth = iScreenW;
282     this.iHeight = iScreenH;
283 }
284
285 //Class HSSprite
286 HSSprite = function( oElement ){
287     if(!oElement){
288         return;
289     }
290     this.obectName = oElement.name;
291     this.oHSTexture = new HSTexture(oElement);    //纹理对象
292     this.nodeData = new HSNode(oElement);
293 }
294
295 HSSprite.prototype.printInfo = function(){
296     trace("SpriteName : " + this.obectName);
297     trace("SpriteTextureName : " + this.oHSTexture.imageName);
298 }
299
300 //Class HSMenu
301 HSMenu = function(){
302     this.obectName = "";        //代表图层的名字
303     this.frameCount = 4;
304     this.normalList    = [];        //HSSprite
305     this.passList    = [];        //HSSprite
306     this.pressdownList    = [];    //HSSprite
307     this.upspringList    = [];    //HSSprite
308     this.nodeData = null;        //HSNodeData
309 }
310
311 HSMenu.prototype.printInfo = function(){
312     trace("MenuName : " + this.obectName);
313     printList(this.normalList,"normalList");
314     printList(this.passList,"passList");
315     printList(this.pressdownList,"pressdownList");
316     printList(this.upspringList,"upspringList");
317     printNode(this.nodeData);
318 }
319
320
321 //Class HSLayer
322 HSLayer = function( oLayer ){
323     this.type = oLayer.layerType;
324     this.name = oLayer.name;
325     this.hsSpriteList = [];
326     this.hsMenuList = [];    //HSMenu
327
328     var frameCount = oLayer.frameCount;
329     for(var frameIndex = 0;frameIndex<frameCount;++frameIndex){
330         var oFrame = oLayer.frames[frameIndex];
331
332         var elementCount = oFrame.elements.length;
333         for(var elementIndex = 0;elementIndex<elementCount;++elementIndex){
334             var oElement = oFrame.elements[elementIndex];
335             var elementLibrartItem = oElement.libraryItem;
336
337             //trace("元素名字 : " + oElement.libraryItem.name);
338             //trace("元素类型 : " + getElementType(oElement));
339             trace("/*********************************/");
340             switch(elementLibrartItem.itemType)
341             {
342                 case "button":
343                 {
344                     trace("case \"button\":");
345                     trace(oElement.name);
346                     this.nodeData = new HSNode(oElement);
347                     //trace(elementLibrartItem.timeline.layers[0].frames[2].elements[0].libraryItem.name);
348                     var oHSMenu = this.handleMenu(elementLibrartItem.timeline ,oElement.name );
349                     oHSMenu.nodeData = new HSNode(oElement);
350                     this.hsMenuList.push(oHSMenu);
351                     for(var i = 0; i<this.hsMenuList.length;++i){
352                         this.hsMenuList[i].printInfo();
353                     }
354                     break;
355                 }
356                 case "movie clip":
357                 {
358                     trace("case \"movie clip\":");
359                     break;
360                 }
361                 case "bitmap":
362                 {
363                     var oHSSprite = new HSSprite(oElement);
364                     this.hsSpriteList.push(oHSSprite);
365                     oHSSprite.printInfo();
366                     break;
367                 }
368                 case "graphic":
369                 {
370                     trace("case graphic:");
371                     //需要Shape 对象
372                     trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0]);
373                     //trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0].contours[0].getHalfEdge().getVertex().x);
374                     //trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0].contours[0].getHalfEdge().getVertex().y);
375                     //trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0].contours[1].getHalfEdge().getVertex().x);
376                     //trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0].contours[1].getHalfEdge().getVertex().y);
377
378
379                     //trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0].contours[0].fill.color);
380                     //trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0].contours[0].fill.matrix.b);
381                     //trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0].contours[0].fill.matrix.c);
382                     //trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0].contours[0].fill.matrix.d);
383                     //trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0].contours[0].fill.matrix.tx);
384                     //trace(elementLibrartItem.timeline.layers[0].frames[0].elements[0].contours[0].fill.matrix.ty);
385                     //trace(typeof oElement.symbolType);
386
387                     break;
388                 }
389                 default:
390                 {
391                     alert( elementLibrartItem.itemType + " 不识别");
392                     break;
393                 }
394
395             }
396             trace("/*********************************/");
397
398
399             //var symbolItemTimeline = oElement.libraryItem.timeline;
400             //var layerList = symbolItemTimeline.layers;
401             //var layerListCount = symbolItemTimeline.layerCount;
402             //for(var symIndex = 0;symIndex < layerListCount;++symIndex){403                 //trace("symbol :" + layerList[symIndex].name);
404             //}
405         }
406     }
407 }
408
409 HSLayer.prototype.handleMenu = function( oTimeline , strMenuName){
410     trace("handleMenu");
411
412     //var layerCount = oTimeline.layerCount;
413     var oLayer = oTimeline.layers[0];
414     var oMenu = new HSMenu();
415     oMenu.obectName = strMenuName;
416     var frameCount = oLayer.frameCount;
417     //
418     trace("frameCount : " + frameCount);
419     for(var frameIndex = 0; frameIndex < 4;++frameIndex){
420         var elementList = oLayer.frames[frameIndex].elements;
421         var elementCount = elementList.length;
422         var frameSprite = [];
423         for(var elementIndex = 0;elementIndex < elementCount;++elementIndex){
424             var oElement = elementList[elementIndex];
425             var oElementType = oElement.libraryItem.itemType;
426             //trace(oElementType);
427             if(elementIndex == 0){
428                 oMenu.nodeData = new HSNode(oElement);
429             }
430             if(oElementType == "bitmap"){
431                 trace(oElement.libraryItem.name + "   " + elementIndex);
432                 frameSprite.push(oElement.libraryItem.name);
433             }else{
434                 alert(oLayer.name + " 包含了图元,如有问题请联系:Ambition");
435             }
436         }
437         switch(frameIndex){
438             case 0:
439                 oMenu.normalList = frameSprite;
440                 break;
441             case 1:
442                 oMenu.passList = frameSprite;
443                 break;
444             case 2:
445                 oMenu.pressdownList = frameSprite;
446                 break;
447             case 3:
448                 oMenu.upspringList = frameSprite;
449                 break;
450         }
451     }
452     return oMenu;
453 }
454
455 HSLayer.prototype.handleBitmap = function(){
456
457 }
458
459 HSLayer.prototype.handleMC = function(){
460
461 }
462
463 HSLayer.prototype.handleGraphic = function(){
464
465 }
466
467
468
469
470
471
472
473 SaveXml = function(strDeviceName,strShowType,iScreenW,iScreenH){
474     trace(strShowType);
475     var device = new HSDevice(strDeviceName,strShowType,iScreenW,iScreenH);
476     //得到时间轴
477     var timeLine = getCurrentTimeline();
478
479     var layerList = [];
480
481     switch(device.sShowType)
482     {
483         case "All":
484         {
485             trace(device.sShowType);
486             var layerCount = timeLine.layerCount;
487             for(var layerIndex = 0;layerIndex < layerCount;++layerIndex){
488                 var oLayer = timeLine.layers[layerIndex];
489                 var hsLayer = new HSLayer(oLayer);
490                 //图层类型包括:guide folder normal mask normal
491                 if("normal" != oLayer.layerType){
492                     alert("[ " + oLayer.name + " ] 类型不为normal类型,因此跳过,有疑问请联系: Ambition");
493                     continue;
494                 }
495                 //layerList.push(hsLayer);
496             }
497             break;
498         }
499         default:
500         {
501             alert("不支持显示类型 : " + device.sShowType);
502             break;
503         }
504     }
505     trace(layerList);
506     trace(timeLine);
507
508     return "";
509 }
510 /**********************************************************************************************/
511
512 SaveXml("android","All",480,800);

转载于:https://www.cnblogs.com/GameDeveloper/articles/2827583.html

Flash(JSFL)相关推荐

  1. 使用 jsfl 发布flash IDE 插件

    http://blog.csdn.net/aosnowasp/article/details/8863601 Flash 有很多内置面板,调色面板.对齐面板.元件库面板等等. 有时为了工作方便,我们需 ...

  2. [转用 jsfl 扩展你的 flash

    转自蓝色理想  有时间玩一下.... 为什么要学习jsfl? 作为一个有些经验的FLASH开发者,想必都会形成一些自己的开发习惯,比如很多人都喜欢把主时间轴第一层命名为:"AS", ...

  3. Flash:快速导出png(jsfl)

    不知道现在还有多少人在用Flash制作内容,如果你也想快速提取Flash中的矢量图形成png,不妨试试这个脚本. 创建脚本 1.创建一个txt文本文档 1.将下面的代码复制粘贴到txt中,并保存 3. ...

  4. 【转载】通过JSFL让Flash Professional CS4或CS5拥有批量FLA导出SVG的功能

    近期一个项目要求博主爱吾所爱(爱生活=爱技术)将 所有的.fla源文件里的图形都转为.svg矢量图,经常一番搜索之后,发现新版本的Flash Professional CC已经有此功能,但无奈我等用的 ...

  5. JSFL批量导出Flash图片(Flash cs4运行没问题)

    最近处理一个swf优化的需求,由于要加载的swf越来越大,要对swf进行瘦身,面对上百张的图片,哥用的是flash CS4,没有直接导出的,虽然有另一种非常蛋疼的导出方式,但作为一个程序猿,要学会懒惰 ...

  6. jsfl应用(flash)

    js基本语法: jsfl文件本质上是js文件,可以直接使用js语法的一些习惯(个人理解) jsfl打印 //**********运行脚本前,将注释删掉************ fl.outputPan ...

  7. FLASH中利用JSFL制作动画并导入Unity

    通过JSFL绘画扇形,然后放置于关键帧中,形成动画. 按照指定的半径和当前长度生成Symbol,如果在指定的半径线宽下当前长度的Symbol已经存在了,那么就不需要再生成Symbol了.利用已有的进行 ...

  8. 浏览器缓存导致FLASH资源更新问题的解决方案

    在网上搜浏览器缓存问题时,遇上了很多问题.一是不知道应该用何种关键字搜索,二是一搜出来,就全是讲的是如何禁用浏览器缓存的方案. 作为大型点的FLASH WEBGAME来说,不缓存显然是不行的.总体上来 ...

  9. Adobe源码泄漏?3行代码搞定,Flash动画无缝导入Android/iOS/cocos2dx(一)

    [注] iOS代码已重构,效率提升90%,200层动画不卡.[2016.10.27] 项目介绍 项目名称:FlashAnimationToMobile 源码. 使用方法点这里. 这是一个把flash中 ...

最新文章

  1. TinyXml高速入口(一)
  2. 自己搭建自动化巡检系统(五) 抖动告警
  3. IDEA下maven项目Plugins和Dependencies红线
  4. Android—EventBus使用与源码分析
  5. 利用cors,实现js跨域访问Tomcat下资源
  6. linux 减小根分区大小_减小linux下根分区
  7. c语言中去掉最小值,2020-07-12(C语言)从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。...
  8. sql字符处理函数concat()、concat_ws()
  9. Django项目部署:使用uwsgi和nginx的方式
  10. oracle改成归档模式_将Oracle数据库改为归档模式并启用Rman备份
  11. logisim软件简单入门使用
  12. Python文件转换为exe文件,可执行文件方法
  13. Unity 3D的常用快捷键
  14. 宝塔面板windows建站教程_宝塔面板建站步骤全过程详解(实战笔记汇总)
  15. 进程和线程常见的19个问题
  16. 固态硬盘是什么接口_固态硬盘那么多接口该怎么选?今天就和大家聊聊
  17. Android RadarScanView雷达扫描控件
  18. feign调用不经过网关
  19. JAVA I/O流 字符流和字节流、节点流和处理流(包装流、过滤流)、缓冲流
  20. 端午节书法作品楷书内容_端午节毛笔字

热门文章

  1. 灵魂拷问:你看过Xgboost原文吗?
  2. combo:机器学习模型合并工具库
  3. 她是直播聊学习成“网红”的北大博士,毕业后入职民办学校,年薪70万
  4. 实时风格迁移,移动端运行,人脸特效又有了新玩法
  5. 最新调查,48%的美国人表示不会乘坐自动驾驶汽车
  6. 程序员被相亲对象的账户余额吓到了!
  7. 泰晤士最新排名出炉,这两所大学跌惨了
  8. 用Python数据分析告诉你:复联哪个英雄人气最高?
  9. 当Python遇上朱茵、迪丽热巴、林志玲、王祖贤等众多美女
  10. 线性回归的改进-岭回归