本地运行swf访问网络的安全问题解决办法2007-07-19 23:49以前要让SWF同时访问本地和网络,都要到MM(现在是AD)的站去设置很麻烦,经过摸索和查资料,原来这样也是可以的: 1、找到这个文件夹:boot disk\Documents and Settings\\Application Data\Macromedia\Flash Player\#Security 2、在其下建立一个名为"FlashPlayerTrust"的文件夹 3、在"FlashPlayerTrust"文件夹下新建一TXT文件,内容如下: c:\ d:\ e:\ f:\ 4、将该txt文件命名为:"myTrustFiles.cfg" ok!!! C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash Player\#Security __________________________________________________________________________________________________________________ 这里推介一种最简单的方法让用户播放你的flash中的flv视频时,缓存文件夹中没有flv视频文件。 1. 用fms(Flash Media Server)或其前身fcs(Flash Communication Server)提供rtmp(Real-Time Message Protocol)服务, 2. 在flash里用rtmp协议访问flv视频 __________________________________________________________________________________________________________________ 对于Sound声音来说,有一点是要引起注意的,尽量将声音放在单独的一个层上,然后设置数据流或是循环,flash会自动的删去无用的帧同时与影片相配合,如果声音与其它内容相混合放置,flash将无法自动删减无用的帧。减慢影片的播放。 __________________________________________________________________________________________________________________ 使用组件对loading的影响及解决方法 如果Flash中应用到组件,loading很可能在影片加载了50%或更多之后才出现,原因是组件的默认链接属性为“为 ActionScript 导出”及“在第一帧导出”,解决方法: 取消库中所有组件链接属性的“在第一帧导出”(在库中组件上点右键->链接),确定后进入文档的发布设置面板,点击“ActionScript 版本”边上的“设置”按钮,将“导出用于类的帧”由默认的“1”改成相应数值。例如你的loading占用了第一帧和第二帧,那么这里的数值应当是“3”或者大于3,但是必须在时间轴调用组件的帧之前。 如果未取消库中所有组件链接属性的“在第一帧导出”,将影响影片的正常发布。 __________________________________________________________________________________________________________________ 深度小于 0 大于 1048575 的用不了removeMovieClip() attachMovie的MC里有个ComboBox就会导致不能removeMovieClip() 库里的按钮元件attach了之后不能removeMovieClip 用第二版组件的时候,深度管理要用 DepthManager ,如果用 getNextHighestDepth() 会超出可删除深度范围,就要用swapDepths()把深度调回来再删 __________________________________________________________________________________________________________________ 在Flash程序开始时我需要载入一个配置文件Config.xml,这个文件和swf文件在同一个目录,当我把swf包含到vb应用程序时,需要设置Flash对象的Base属性,并指定到于swf同目录里,在VB可以使用这样一个语句: FlashObject.Base = App.Path + "/flashApp.swf" __________________________________________________________________________________________________________________ AS3:Flash制作大头贴的最佳方案 有兴趣并且有条件(安装了最新版的FlashPlayer8.5并且有摄像头)的的朋友可以先去体验一下我用Flex2来开发的的大头贴程序:http://www.weni.cn/capture/ 随着flash8的发布,使用flash8的位图处理新功能来开发大头贴程序的运用也越来越多,比较突出的是腾讯的QQ-ZONE。 然而使用flash8的as2来生成图片并且提供用户下载的效率并不高,相关瓶颈和解决方案在我的blog(http://www.weni.cn/index.php?play=reply&id=57[url])有介绍。 然而AS3则可以很好地解决上面的一系列问题: 1、AS3可以直接把截取的BitmapData生成压缩过的png格式文件的二进制数据,这样同样大小的画面传输的数据量可以缩减成只有原来的几十份之一。 2、后台接收到数据之后直接将接收到的数据存储成png格式的文件即可(php只要一行代码就能搞定),从而后台的效率可以提高到原来的几倍到n倍。 3、AS3的数据处理速度是AS2的几十倍到上百倍,例如大头贴的相框都是灰度的gif图,我用BitmapData的方法将相框中白色转成透明,黑色部分转成白色,黑白之间的颜色转成半透明的颜色,这样才能将相框应用到相片上面去,这个转变过程我用as2来实现要花上3~7秒的时间,然而用as3实现的话瞬间就完成了 __________________________________________________________________________________________________________________ 使用 allowscriptaccess 使 Flash 应用程序可与其所在的 HTML 页通信。此参数是必需的,因为 fscommand() 和 getURL() 操作可能导致 JavaScript 使用 HTML 页的权限,而该权限可能与 Flash 应用程序的权限不同。这与跨域安全性有着重要关系。 也就是说如果swf在blog.80s.net.cn下,但是页面在fmail.80s.net.cn下,想用getURL或者fscommand调用页面中的js是不可以的 除非你将value设置为always value参数说明: always 允许随时执行脚本操作。 never 禁止所有脚本执行操作。 samedomain 只有在 Flash 应用程序来自与 HTML 页相同的域时才允许执行脚本操作。 所有 HTML 发布模板使用的默认值均为 samedomain。 __________________________________________________________________________________________________________________ Stage 和 Bitmap 尺寸都不能超过 2880 __________________________________________________________________________________________________________________ flash5 下关机 fscommand ("exec","rundll"+chr(9)+"user.exe,exitwindows"); __________________________________________________________________________________________________________________ 以下为个人对于「不同swf使用单一SO对象时的一致性」的一些心得: ● 要保持不同swf档案之间so对象的一致性 一定要将旧的SharedObject Ref.删除 重新呼叫SharedObject.getLocal(),以更新so对象 ● 直接重新指定参考so = SharedObject.getLocal()是没有用的 因为旧的so对象不会被回收 ● 丢弃so对象可以用delete或是指定为null ● 单一swf内,重复使用SharedObject.getLocal()取得相同名称的so对象 假如未将之前取得的so对象丢弃 后续用SharedObject.getLocal()取得的so永远是同一个so对象参考 (ref. equal) Singleton? ● 多个swf陆续呼叫SharedObject.getLocal()取得相同so对象之后 假如都没有释放取得的so对象 只有最后一个取得so对象的swf 具有真正写入.sol file的权力 ● 不违反上一个条件的情况下 可以用SharedObject.flush()让资料确实强迫写入 __________________________________________________________________________________________________________________ 异步就是说你的程序执行一个操作后不会等待那个操作继续按流程执行,当那个操作结束后再通知程序,这样使程序不会挂起. __________________________________________________________________________________________________________________ flash适应任何分辨率方法 if (System.capabilities.screenResolutionX>=1024) { Stage.scaleMode = "noScale"; } __________________________________________________________________________________________________________________ 如果你有 Flash 影片不想让别人打印. 只要将第一个关键帧命名为:"!#p"(不含引号) __________________________________________________________________________________________________________________ 只要有个crossdomain.xml的文件放在被读取XML站点的根目录下,其他站点的FLASH就可以访问该站的数据了。crossdomain.xml的内容是: __________________________________________________________________________________________________________________ Flash 8沒有Code Hint? (04-12-2005) 在Flash 8,以前用_mc等後綴產生Code Hint做法,還有在Button上打on,立即出現release等Code Hint的功能都不復存在。對於我平常做一些ActionScript 1快速Prototyping十分不方便。於是,只有將Flash MX 2004的C:\Documents and Settings\用戶方稱\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\ActionsPanel\AsCodeHints.xml複製到C:\Documents and Settings\用戶方稱\Local Settings\Application Data\Macromedia\Flash 8\en\Configuration\ActionsPanel便可以重新出現Code Hint。 __________________________________________________________________________________________________________________ 电视用flash,尺寸720*576 帧频 25帧/秒 作好可以用SWF2VideoPro转AVI视频 __________________________________________________________________________________________________________________ 默认的扩展代码提示配置文件: D:\Program Files\Macromedia\Flash MX 2004\en\First Run\ActionsPanel\AsCodeHints.xml __________________________________________________________________________________________________________________ Object是所有AS类的基类,可以被赋值为任何类型的数据, Object就像人类中的AB血型,可以接受任何类型;而null和undefined就像O型血,可以被任何数据类型接受 __________________________________________________________________________________________________________________ 所有的函数都是Function这个对象的实例,所以每一个函数都有apply、call的方法以及prototype的属性。 myFunc.call(theObj, arg1, arg2....)的作用是执行myFunc函数,其参数为arg1, arg2...,但和一般的执行有些区别,这里它重新指定了myFunc的主体对象,也就是说,原来假设myFunc是myObj的一个成员函数或者myFunc是一个全局函数,现在就让它作为theObj的一个成员函数来执行,myFunc内部的this,就指代theObj myFunc.apply(theObj, arguments)的作用和myFunc.call类似,theObj也是作为新指定的主体对象,只不过它把参数列表都封装到arguments数组中了。它一般是用来在一个函数内执行另一个函数,而需要成批传输参数,或者参数的个数事先不知道的情况下的。 prototype是用来形成类继承链的一个对象,比如定义了一个函数function myClass(){...},又定义了myClass.prototype.prop = 1;或者myClass.prototype.method = function (){...},那么当用这个函数构造的对象a = new myClass(),a就可以这样来调用这个类的成员:a.prop、a.method()。继承相对来说比较难理解些,我就不讲了 __________________________________________________________________________________________________________________ 避免FLASH遮住菜单的方法 __________________________________________________________________________________________________________________ 1048576(1024*1024)是flash的临界图层,只要图层大于或等于该数字,就无法使用removeMovieClip删除他。 这是从使用flash的UI Components过程中发现的,他的focusManager就放在这一层,所以,使用UI Components的时候,如果要removeMovieClip,必须要swapDepths一下。 __________________________________________________________________________________________________________________ 通过getURL方式来实现超连接; 通过FSCommand方式来调用js(或VBS)函数 __________________________________________________________________________________________________________________ 當一個Variable/Object不再需要時,就應該刪除/釋放,以讓出Memory,這種Memory資源管理,稱為Garbage Collection(垃圾回收),簡稱gc。在Flash裡面,熟悉的所謂gc做法有兩種,針對Variable/Object,可以用delete,針對Movie Clip,可以用removeMovieClip()。 __________________________________________________________________________________________________________________ 修改Class后要重新编译SWC 其实也不难,先要改变类文件,Classes\mx\skins\halo\Default.as里 x = _global.styles.AccordionHeader = newCSSStyleDeclaration(); x.fontWeight = "bold"; x.fontSize = "11"; x = _global.styles.Accordion = new CSSStyleDeclaration(); x.borderStyle = "solid"; x.backgroundColor = 0xFFFFFF; x.borderColor = 0x8a938a; x.headerHeight = 22; x.marginLeft = x.marginRight = x.marginTop x.marginBottom = -1; x.verticalGap = -1; // x.fontSize = "11"; 这个是标题文字大小 x.headerHeight = 22;这是标题框高度 改变好了保存类文件,到First Run\ComponentFLA目录下找到StandardComponents.fla文件打开,该文件包含了所有标准组件的类文件连接信息,在库里选择Accordion组件并导出swc文件覆盖原来的Accordion.swc即可 __________________________________________________________________________________________________________________ 使用的frame rate是设定在 10,15,18,21,30 这几个,video播放效果会比较好 __________________________________________________________________________________________________________________ 硕思在还原的时候去掉了一些代码. 这些代码是写在#initclip里的需要满足以下条件, 1.把MC放在库里,通过attachMovie()来使用 2.把这段使用的代码放到 #initclip ...initialization actions go here... #endinitclip 里 __________________________________________________________________________________________________________________ 霓虹字效果都是把字打散 -> 分散到图层 -> 柔化边缘得到的 __________________________________________________________________________________________________________________ Void和void同是flash中的关键字,但是他们之间存在差别。 首先Void是一种特殊的类型,因此函数可以是Void型的。之所以说Void特殊,是因为没有Void型的变量。 比如下面的代码: var k:Void; //error:A variable may not be of type Void. Void型的函数表示不返回任何类型的对象。 function myfunc(Void):Void { } 假如有看过as2lib包内的类文件,里面经常可以看到类似上面的语句,参数为Void表示无参数。 void很少单独使用(我想应该有单独使用的例子,但是很遗憾我没有找到),void(x)表示忽略x的值返回undefined。 如果函数参数省略Void: function myfunc():Void{ trace(arguments[0]); } myfunc(12); //output:12 则可以接受任何参数,而且个数不限。有时为了模拟方法重载所以会省略Void __________________________________________________________________________________________________________________ 做了一下Flash脚本执行顺序状况的测试,总结出以下几条规则: 1.先执行帧脚本,再执行该帧中的影片剪辑中帧脚本. 2.同一帧中不同图层的帧脚本的执行顺序是从上层图层至下层图层; 3.不同影片剪辑中的帧脚本执行顺序是根据其加载顺序来的.通常下在同一帧中不同图层内的影片剪辑脚本以自下层图层至上层图层; 4.由于非脚本创建的影片剪辑最先加载,所以先执行非脚本创建的影片剪辑中的脚本,再执行由脚本创建的影片剪辑中的脚本,脚本创建的影片剪辑遵循"先创建/加载,先执行"的原则; 5.非脚本创建的影片剪辑的加载顺序是由深度低至深度高. 6.gotoAndPlay语句如果是跳转到同一影片剪辑中的某一帧,则该语句后面的语句还会执行,如果是跳转到其它影片剪辑(比如:_parent.gotoAndPlay(n)),则其后的语句不会执行. 提醒一点: 由于执行顺序是由上图层至下图层,所以如果脚本中有#include,应放到上图层中.这样其中的函数或变量才能被下图层的脚本引用. 最后建议: 为了不被Flash的执行顺序搞晕,请按照OO的思想编写作品,gotoAndPlay使用适当,变量的引用也最好有封装性,不要在不同的影片剪辑中引用同一个变量,全局变量尽量不用.Flash并没有规则一定要怎样书写脚本才算合格,但是为了工作的方便,请注意规范写法.否则考虑脚本的执行顺序就够受的了.下面几个原则不妨遵守一下: 1.勤写注释. 2.脚本写在一帧中,不同段的脚本用注释分开. 3.脚本写在帧中,事件处理器不要加到按钮/影片剪辑上. 4.不使用全局变量. 5.不直接在函数中引用某一影片剪辑,而改用参数引用. 6.不要频繁使用gotoAndPlay. 7.常用的函数写到主场景的帧上,或者写到外部文件中再include. 8.影片剪辑里帧中如果有函数,不如为该影片剪辑自定义一个类再用AS2.0类链接.把该函数作为类的一个方法.影片剪辑中的变量亦是如此. 9.除非两段影片真的毫无关系,否则慎用多场景. __________________________________________________________________________________________________________________ flash输出mov组合 Flash9+QuickTime7.5 Flash8+QuickTime6.5 Flash8+QuickTime4.0 其实就是建一个空白场景,然后导出影片,选择自己要的MOV格式,导出时要设置一下发布设置成Flash5,导出的Mov要转成Flv就用TotlaVideo工具转就行了!这次真是搞晕我这Flash 菜鸟了!