论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS编程教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

关于Flash JavaScript API

文章类别:Flash AS编程 | 发表日期:2008-10-6 18:13:05


 最近在研究AVL平衡二叉树AS3实现及BSP算法,以实现更好的深度排序,由于排序的物体包括如椅子这样的家具,所以希望能够通过某个算法获得物体的边缘,于是了解一些边缘检测算法,但是,发现边缘检测算法比较复杂,如果通过Bitmap来做的话,可能对于大的物体其效率不太可观. 便想到,如果在生成SWF的时候能够预处理好边缘直接获得一个边缘列表就好了.如果将这份工作交给美工,可能他们会非常痛苦,因为要记录每一个顶点的位置,中午的时候花了一点时间看了一下Flash JavaScript API ,有所收获,记录下来分享一下.
  Flash JavaScript API 是什么?
  
取这个名字还真让人不太容易理解,初步一看,好像是Flash提供Javascript的API.让人太容易跟JavaScript混在一起. Flash JavaScript API 运行在Flash IDE中,类似ActionScription语法,用于扩展Flash IDE运行时的功能. 跟JavaScript一样Flash JavaScript API 提供了一个DOM, 这个DOM包括一些顶级函数和两个顶级对象[FLfile 对象和 flash 对象 (fl)]. 这样,Flash IDE好比浏览器,Flash JavaScript好比浏览器中的JavaScript,如果你比较清楚了解Js,理解起来就比较清楚了. 你可以在Flash IDE中编写和运行Flash JavaScript, 它的后缀名为 .jsfl .
  Flash JavaScript能做什么呢?
  
"利用 JavaScript API,您可以编写有助于简化创作过程的 Flash 应用程序脚本。例如,您可以编写脚本来自动执行重复性任务、向"工具"面板添加自定义工具或者添加时间轴特效。" 官方文档上是这样说的. 正如我前面描述的需求一样,我希望能通过Flash JavaScript给我处理边缘顶点,只要美工直接描述出边缘,我通过Jsfl代码将顶点检测记录下来就OK了.
  更详细的解释你可以去看看Help,里面决对又有新的东西了..
  迟点发布AVL树的AS3版本.
  下面发布一个检测边缘的DEMO.

  1. 先用钢笔工具勾一个封闭多边形,然后选中右击变成元件.
  2. 将元件命名为: Wills
新建一个jsfl文件,粘贴如下代码:
如果你的多边形没有曲面的话,在你的FlashIDE中将会出现一个跟你勾出来的多边形一样的多边形,不过是绿色的,这个就是上面的代码临时画的了. :) 效果如下:

JavaScript代码
  1. var nameToSearchFor = "Wills";   
  2. var doc = fl.getDocumentDOM();   
  3. var results = fl.findObjectInDocByName(nameToSearchFor, doc);    
  4. getEdgesVertices(results[0].obj.libraryItem.timeline.layers[0].frames[0].elements[0]);   
  5.   
  6. function trace(item){   
  7.     var str="";   
  8.     for(var i in item){   
  9.         str=str+"           "+(i+":"+item[i]);   
  10.     }   
  11.     fl.trace(str);   
  12. }   
  13.   
  14. function getEdgesVertices(target){   
  15.     var str="[";   
  16.     var edges=target.edges;    
  17.     var arr=new Array();       
  18.     fl.trace(edges.length);   
  19.     for(var i=0;i<edges.length;i++){   
  20.         arr[i]=edges[i];   
  21.     }   
  22.        
  23.     var point=new Array();     
  24.     var star,end,k,length=arr.length,ve;   
  25.     for(var i=0;i<length;i++){   
  26.         k=-1;   
  27.         for(var j=0;j<length;j++){   
  28.             if(arr[j]){   
  29.                 if(star==null){   
  30.                     star=arr[j].getHalfEdge(0).getVertex();   
  31.                     end=arr[j].getHalfEdge(1).getVertex();   
  32.                     arr[j]=null;   
  33.                     k=j;   
  34.                     break;   
  35.                 }else{                     
  36.                     ve=arr[j].getHalfEdge(0).getVertex();                      
  37.                     if(ve.x==star.x&&ve.y==star.y){   
  38.                         star=arr[j].getHalfEdge(1).getVertex()   
  39.                         arr[j]=null;   
  40.                         k=j;   
  41.                         break;   
  42.                     }   
  43.                        
  44.                     ve=arr[j].getHalfEdge(1).getVertex();                      
  45.                     if(ve.x==star.x&&ve.y==star.y){   
  46.                         star=arr[j].getHalfEdge(0).getVertex()                         
  47.                         arr[j]=null;   
  48.                         k=j;   
  49.                         break;   
  50.                     }                          
  51.                 }   
  52.             }   
  53.         }   
  54.            
  55.         if(k!=-1){             
  56.             point[i]=star;   
  57.         }          
  58.     }   
  59.        
  60.     fl.drawingLayer.beginDraw( true );   
  61.     fl.drawingLayer.beginFrame();   
  62.     fl.drawingLayer.setColor( "#00ff00" );   
  63.     fl.drawingLayer.moveTo(point[0].x,point[0].y);   
  64.        
  65.     for(var i=0;i<point.length;i++){           
  66.         fl.drawingLayer.lineTo(point[i].x,point[i].y);   
  67.     }   
  68.        
  69.     fl.drawingLayer.lineTo(point[0].x,point[0].y);   
  70.        
  71.     fl.drawingLayer.endFrame();   
  72.     fl.drawingLayer.endDraw();   
  73. }  

运行,效果如下:

视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058