这都是以往的开发经验,不代表最新的播放器也会有这样的问题,总结一下。看了看以前的日志,发现了一些错误的地方。还有一些地方开发的时候因为规范化越来越好了,所以也没有再出现这样的问题。但还是记一下吧。细节部分将陆续更新。
1.hitTest
检查两mc碰撞时,如果其中一mc为空mc,这回直接碰撞a.hitTest(b),就会有问题。如果以这种形式a.hitTest(b._x,b._y,true),就会没有问题。但第二种形式的坐标必须为_root的坐标。空mc中的gounds也会失效.
2.gotoAndStop
如果一mc内部为五帧,那么你mc.gotoAndStop(100)就会跳到最后一帧。但mc.gotoAndStop(0)就不会跳到第一帧
3.文本对象
以前用2004写东东的时候建一文本,文本的实例名于变量名都用了txt加上一数字,发现竞然直接出现了文本实例的路径。
4.写东东的时候,千万要注意对不同的值的引用。
最近发现关于mc._alpha的特点。如下:this.onEnterFrame = function() {
trace(qiang_mc._alpha);
qiang_mc._alpha =qiang_mc._alpha-1;
};
我以前加的判断是if(qiang_mc._alpha==0){//然后执行程序}
呵,后来发现不对。原来mc的透明度不是按整数递减,具体原因不明
5.两个mc互换深度
mc1.swapDepths(mc2);
6.数组的复制
一维数组的复制可以用array.concat()进行复制。而二维,或更多维的就不好使了。因为多维数组是引用
7.关于深度
在时间轴上建立的mc,如果第一帧为空,第二帧有一个mc,名字叫a,当a跳到正Depth的时间,它就会跨出帧的概念,也就是说会一直存在下去,只能你给移除。而如果是负深度的会,会一闪一闪,也就是说,第一帧没有它,第二帧又有它.
8.关于声音
首先在绑写声音的同时把导出第一帧选项去掉,然后用一空mc,装入现有的声音,然后在第二帧,第一帧停止。然后load画面就出现了。否则第一帧loading时间过长
9.SharedObject
SharedObject对象无法存布尔值,如果取值的话,取出来的是undefined
10.侦听对象
第一帧是侦听对象,而没有移除侦听对象就跳到第二帧,然后再返回第一帧,这时按键侦听对象就会时不时的出现无反应的情况。所以此时应该在第二帧删除侦听对象,在第一帧上再重新加载侦听,这时就好用了
11.unloadMovie()
早在世纪流年里就看过关于删除mc的语句。他说unloadMovie()删掉后,会保留原mc的函数于属性,我不认同这点(后来测试了关于btn的,可能跟流年说的是一样的,大家用的时候测试一下)。
removeMovieClip()可以删除一定范围内正深度的mc,如果要删掉负深度于大于那个范围的mc,则必须用跳转。然后才可以用removeMovieClip()删掉。而unloadMovie()不用,它可以删掉所有深度的mc(至少我测试是这样的)。但它不是立即删掉的,而是象载入一样,有一个过程。一般来说_root不可以清,但是它有属性。是可以改变的。但是用unloadMovie()这个,连_root都没问题。哈。强。unloadMovie(btn)
btn=undefined//不定期可以删掉按钮。牛。哈。
12.引导层
引导层发布后,应该是不显示的。但是他还纪录引导层的帧数。在一mc里,我实际应用到的是六帧,而引导层是40帧,发布后mc的总帧数就变成了40帧。不知道是mm为了图方便还是bug,真是让人着实的郁闷呀。
13.loadMovieNum
其实这是在帝国的贴子上看到的。但是我忘了连接。作者看到不要怪偶呀。谢谢。
loadMovieNum("url",level [, variables])
你可以试一试下面这些指令:
loadMovieNum("1234.swf",-100);
loadMovieNum("1234.txt",-100);
loadMovieNum("1234.exe",-100);
不知道是不是一个隐藏的功能???
我这里执行的时候, 竟然调用IE打开swf, txt, 可惜对exe, 只是弹出一个窗口问题要不要下载.( MX2004professional7.01, flashPlayer7)
loadMovieNum("f:/mp3/02.Juliet.mp3",-1);
这么用也可以,这样就可以调用f盘的mp3用默认的播放器播放了。
只要深度是负数就可以用。as1.0 PL6也可以用啊 。
14.关于几个事件的执行顺序
onKeyDown执行顺序在onEnterFrame的执行顺序之前,当建立onEnterFrame事件后,onEnetrFrame并没有立即执行,而是下一帧的时候才开始执行。虽然都很简单,但有时候因为这些细节出的bug,很难找的
15.eval()
关于[]于eval谁好谁坏,呵,这完全是习惯问题。但如果两者都能掌握,那就是最好的了。
一般来说[]于eval可以实现共同的。但两者还有一些差别我举例说明一下。这东东都靠自己感觉。思想的闪动。呵呵。
a=[[],[]]
b="a.0"
eval(b)[0]=1;
trace(a)
介绍一些编程用法,虽然不是什么难题,但有时也很关键。
a={}
a.b=function(){};
a = [];
for (var i = 0; i<10; i++) {
// a[i]=[]
eval("a")[i] = [];//这两种方法都可以声明多维数组
}
trace(a);
其实a[0]==a["0"]
还有_root._name="_root"//默认根目录没有名字。
eval在等号左边的时候返回的是引用的对象。在右边的时候返回引用的数值
16.my_mc.attachMovie(idName, newName, depth [, initObject])
中的[, initObject]需要特别注意一下。帮助中说:
initObject (Flash Player 6 和更高版本支持)包含要用来填充新附加的影片剪辑的属性的对象。此参数使动态创建的影片剪辑能够接收剪辑参数。如果 initObject 不是对象,则将被忽略。initObject 的所有属性均将复制到新实例中。构造函数可使用通过 initObject 指定的属性。此参数是可选的。
呵,其实帮助中说了很多很细的东西。而我们平常用的时候只知道一些最基本的用法。这里我说一下我发现的东东吧。别的不敢狂言呀。
直接在initObject 中添加属性的时候,它就是等同于构造了一个新类。可能我说的不太明白。这样理解。
如果直接att的话,是从库中直接att出一个mc,这时的mc有mc类的所有特性。这时你往此mc里添加属性,然后你再复制此mc,这时添加的属性不会在新复制出来的mc中出现。如果在initObject初使话的话,复制出来的mc会有新加的属性。
17.mc的引用地址
a = _mc;//场景中的mc
trace(a);
_mc.duplicateMovieClip("tt_mc", 10);
_mc._x=100
_mc.swapDepths(111);
_mc.removeMovieClip();
tt_mc._name = "_mc";
trace(a+"---"+typeof(a));
也就是说移除掉mc的时候,地址还是存在的。这时候可以把别的mc名字换成它的,就又可以直接引用了。
18,通过网页往swf里面传值
xxx.swf?var=xxx
连接地址往swf里传值
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="899" height="560" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="swf/redcard.swf" />
<param name="quality" value="high" />
<param name="Menu" value="false">
<param name="bgcolor" value="#ffffff" />
<param name="flashvars" value="hname=&word=&myname=" />
<embed src="swf/redcard.swf" menu="false" flashvars="hname=&word=&myname=" quality="high" bgcolor="#ffffff" width="899" height="560" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
19.wmode=opaque的动画优化
wmode=opaque的动画优化
看了Xuite日记里的文章:《如何改善swf在html下fps降低問?#125;! 》。
试验了一下,发现给动画设置参数:<param name="wmode" value="opaque" />之后动画运行速度有了很大的提升.
http://www.weni.cn/index.php?play=reply&id=46
引用地址
18.mask
在ide建的遮罩下的mc里的动态文本,输入文本都不会显示.如果用语句setMask就会显示。这些都是在文本没有旋转的情况下,因为文本一旦有旋转的话就需要嵌入字体了。
19.做动画时候的声音同步
前两天做一多媒体光盘,发现一问题,声音无法跟时间轴动画同步.怎么做都解决不了.后来美工给解决了.也是巧合吧.后来发现了问题,记一下.声音是wav格式的,是语音.默认发布后是对语音有压缩的.在这地方,你要改成源有语音的质量.这样就解决了.
20.文本在有些时候会缩小
我纪录了我发现的一种情况。一个mc下有一txt,这个mc会旋转,这时候也相应的倒着旋转此文本。但是这时候mc的旋转角度最好为整数。否则为有些小数的时候,mc下面的txt就会变小。
21.尽最大的可能优化运动的图片的抖动
1.把_quality属性改为"BEST";
2.图片的移动尽可能缓慢;
3.图片的起始坐标于目标坐标的差值要正好为起始帧于目标帧的差值的整数倍(制作动画的时候);
4.图片不要打散,不要有缩放,旋转;
5.建元件的时候要以左上角为注册中心;
6. 如果图片为矩形,图片的注册中心正好为矩形中心,那么图片的宽度尽量为偶数(最好是不管任何时候都是偶数);
7.同理,如果图片在移动中有缩小放大的变化,那么按以前的理论都应该做相应的变化.而不应该出现小数的情况.
22.防止静态文本加锯齿产生的模糊情况
一般做动画的时候,为了让12号宋体静态文本显示清楚.所以大家都会再给它加上锯齿,这样就会跟网页的字体很相象.但做动画或放到舞台后,发现有的时候会出现模糊的问题.那是因为你文本的位置坐标为小数了.更严谨的说是不管嵌态多少层,那么最后为了显示清楚这样的文本,就要让这些层的mc的坐标加上文本的坐标为整数
23.按默认发布配制来加载的程序的执行顺序
默认是从上到下的程序执行顺序<----------------------这个是讲在不同的层的加载顺序.而同一层的加载顺序就是按照时间轴来顺序加载,mc的嵌套,然后是同一层上的mc的深度执行.所以在底层的mc里的时间轴的程序执行顺序也比他父mc的上层的程序执行顺序优先
24.wmode=opaque的动画优化
wmode=opaque的动画优化
看了Xuite日记里的文章:《如何改善swf在html下fps降低問?#125;! 》。
试验了一下,发现给动画设置参数:<param name="wmode" value="opaque" />之后动画运行速度有了很大的提升.
http://www.weni.cn/index.php?play=reply&id=46
25.关于群组(ctrl+g)
群组后的色块,然后进行发布swf会有问题.
1.色块有的时候会产生模糊
2.色块的范围会被系统认为变大了,比如做个mc,给加上onRelease事件后,放到边上,这时候onRelease还好使,可是,然后用hitTest来判断的话,还没有遇到此mc
26.关于字符串检查中文
var num_str = "afd中文";
for (var i = 0; i<num_str.length; i++) {
if (num_str.charCodeAt(i)>128) {
trace("有中文字符");
break;
}
}
27.关于_xmouse,_ymouse
在播放器中测试,这两个属性全是整数。但用浏览器打开,这两个属性就有小数。
28.mc宽度跟高度的最大边缘值(约等于,不会相差300相素)
803304
29.关于asfunction
"<a href=\"asfunction:playMP3, _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," _fcksavedurl="\"asfunction:playMP3," track1.mp3\">Track 1</a><br>"
上面的一句的playMP3是根目录的函数,我为什么一定要说是根目录呢,因为在这里也是有路径查找函数的
30.adobe的官方文档的一些对flash的技术说明,还真了解不少。以下是链接!
http://www.adobe.com/cn/support/flash/technotes.html
31.new MovieClipLoader的bug
在flash8 ide下,我用56K模拟下载,同时有十个loader加载图片。所有的对象事件几乎都全了。有onLoadProgress,onLoadComplete,onLoadError,onLoadInit
当超过15秒后,程序就会弹出超时框,点击是或否,ide自动关闭。当我用56K*2的速度测的时候,就不会出现这样的问题。
而当我用56K再测的时候,去掉了onLoadProgress事件,也不会出现这种问题。估计跟loader的数量或网速有关
32.投影滤镜于遮罩文本同时混用
以前记得遮罩遮动态文本会有问题。就是在ide下的编辑的遮罩会遮住动态文本,并使之文字不可见。而用as来setMask就可以显示出来了。今天遇到的问题就是用遮罩遮一个在ide下投景的mc,mc下面还有几层有遮罩的mc.这时会出现很怪异的现象。文字也不见了。屏幕更出现很另类的断屏
33.关于声音的onLoad事件
很早就知道在帧上写代码的剪片剪辑的onLoad事件不好使。最近在编写声音的时候也用到了onLoad事件。在flash ide下是可以触发的。单独的player下确不行。记一下。
34.得到加载的swf的场景的宽跟高
有很多人想知道是否可以得到加载进来的mc的原始的场景的宽跟高,一种方式是用后台或壳程序来读swf的头文件。这种办法略实用一些.
很多朋友说单独的swf是不可以得到,现在我说一下不用后台也可以得到的方法,但不实用。loadMovieNum(swf,0),这样就可以用全局变量保存住场景的宽跟高。在网页中不可以,至少我不知道。如果是单机的,可能就会重调两次播放器的大小了
35.new ContextMenuItem帮助中的例子
var my_cm:ContextMenu = new ContextMenu();
var open_cmi:ContextMenuItem = new ContextMenuItem("Open", itemHandler);
var save_cmi:ContextMenuItem = new ContextMenuItem("Save", itemHandler);
var print_cmi:ContextMenuItem = new ContextMenuItem("Print", itemHandler);
print_cmi.separatorBefore = true;
my_cm.customItems.push(open_cmi, save_cmi, print_cmi);
function itemHandler(obj, menuItem) {
trace("You chose: " + menuItem.caption);
};
this.menu = my_cm;
以上的代码是flash8帮助中的例子,运行不了,右键菜单会消息。原因在于使用了关键字"Open", "Save","Print",所以良好的习惯还是要注意的
37.new MovieClipLoader 在远程调用蔌本机调用的时候有安全权限的限制
我在把网站融入到我的flash game游戏里的时候(说白了就是远程或不同域载入www.erabillow.com的flash),在本机测试加载图片或swf,发现用unloadClip竞然无法完全删除。在网站上测试确可以,因为是一个域的,一定是加了安全限制。所以后来我又用removeMovieClip补上一句可以了。MM正渐渐抛弃老的方法是为了更安全。可是也没有给用户说明。真让人很郁闷。
38.flash8里面的htmlText 不支持渐进JPEG 文件
my_txt.html = true;
my_txt.htmlText = "fd<img src='test1.jpeg' width='100' height='100' />";
在flash9里是可以的。
39.flash8 ide中的flash player的bug
以前说过用MovieClipLoader类里的loadClip方法加载东西的时候会出现一些问题,以下再补充一问题。就是在flash8 ide中的flash player的用载东西的时候,在没有加载完的时候关闭播放器,有时会影响player再次播放不出来,甚至会直接使flash ide产生错误。大家要小心。很郁闷的问题。好的办法就是不要用ctrl+enter来发布,而是用shift+f12发布后,在外部进行测试
40.flash中的所有的滤镜的问题
说是所有的滤镜问题可能有点不准确。其实我只是测试了其中一种滤镜。但我想其它的应该也有这种问题的。var myFilters:DropShadowFilter = new DropShadowFilter();当一mc加载图片完成后,对此mc使用此滤镜,失效。解决办法是在此mc上层嵌套一mc,此mc来应用滤镜
41.还是关于MovieClipLoader
MovieClipLoader.loadClip()一但执行了,暂时我不知道有什么办法停止它加载或报错.而用unloadClip也没有办法在中途停止它的加载。并且如果你只是用.removeListener(tileLoad)来取消事件,它只是停止了对象的广播,并不停止加载(可能很多达人都知道了,不要笑我哈).如果_mc.removeMovieClip()删掉后,再马上建立,加载器还会加载到同名的mc中。很是郁闷!
补充一下,上面说的是用一个loader来加载多个对象,而如果一个mc下面建一个loader的话,删除这个mc,那么这个loader就会消失,就不会继续加载了。我测试是这样的
42.阴影滤镜DropShadowFilter
以前用阴影滤镜跟mask的时候出过问题,我也记不得在这里记没记录了。大体就在对一mc用了阴影滤镜,然后用这个mc遮罩或被遮罩(具体我忘了),画面就会错乱,刷新不了屏幕。这次是对一mc用了阴影滤镜,然后再对这mc进行alpha属性操作,会留残影(flash8,flash9是可以的),怎么也去不掉。不知道其它滤镜有没有这种问题。应该也会有不同的问题吧。
43.从Flash 8开始,默认本地域不能访问网络,您在本地运行地图应用时,可能会遇到这样的提示:
您需要对Flash播放器的安全策略进行设置,具体步骤如下:
第一步:下载 set_flash_policy.rar 文件,解压到一个目录,如C:\
第二步:运行set_flash_policy.cmd文件,完成对Flash播放器安全策略的修改。set_flash_policy.cmd默认设置在您的C盘、D盘、E盘、F盘的Flash有访问网络的权限,如果没有您的盘符,可以修改set_flash_policy.cmd的内容,加上您的盘符,或者去掉不需要的盘符。
44.在player10全屏后,点击退出全屏按钮于stage的侦听有冲突
此bug是由于升级了flash player10所引起的新问题,以前的ie 中的flash控件6,7,8,9都可以.正在找出现在问题.
function fullScreen():Void {
Stage["displayState"] = Stage["displayState"] == "normal" ? "fullScreen" : "normal";
}
_btn.onRelease = fullScreen;
Stage.addListener(this);
在flash player10里就不好使,点按退出全屏按钮就不好使。10以下的好使。
解决办法是Stage.removeListener(this)掉后,然后再Stage.addListener(this)
45.关于System.security.allowDomain("*");
a.swf在a.com的域里,b.swf在b.com的域里.这两个文件需要相互改变各自的属性于方法.所以需要在这两个文件的第一帧里加入System.security.allowDomain("*");但是swf确有一个问题,就是主加载的全局变量,在子加载的全局变量里访问不到.很让人无语.如果两个swf在同一个域中就可以访问到这个全局变量
46.还是关于System.security.allowDomain("*");
http://a.a.com下的是主加载的文件a.swf,b.a.com下的是被加载的文件b.swf.这时候b.swf加载进来的时候,就是onLoadComplete的时候,a.swf想修改b.swf的属性或方法也不行.也需要在System.security.allowDomain("*");执行后才可以.但是b.swf确可以直接访问a.swf的数据.因为a.swf已经在一开始就执行了关于System.security.allowDomain("*");真是麻烦的安全限制
47. Flash中发送E-mail方法详解
比如我想点击按钮时发送邮件到flashjack@8848.net,在这个按钮上加as应为:
on (release) {
getURL ("mailto:flashjack@8848.net");
}
还可以加下列几个参数:
Subject= 邮件的标题
CC= 抄送邮件地址
BCC= 暗送邮件地址
Body= 正文内容
格式如下:
getURL ("mailto:flashjack@8848.net?Subject=闪酷网友来信&CC=aaa@sina.com&BCC=bbb@163.net&Body=BlueJack你好:");如果想按用户输入的地址发送,可以在场景里建一个输入文本框(Input Text),在Variable里设个变量名,如dz。按钮的action改为:
on (release) {
getURL ("mailto:"+_root.dz+"?Subject=闪酷网友来信&CC=5d@sina.com&BCC=5d@263.com&body=BlueJack");
}你好:
注意:getURL函数里的URL选项,要选中后面的Expression。
文章来自: 闪客居(www.flashas.net) 详文参考:http://www.flashas.net/html/flashas/asjinjie/20060619/1282.html
48. ExternalInterface的call函数返回null的原因分析(AS2)
ExternalInterface的call函数返回null的原因分析(AS2)2007-05-23 00:45还是先研究一下AS2中的一个常见问题,在IE下和flash交互不正常的情况~!这些情况包括题目中的ExternalInterface.call函数调用JS函数不能得到返回值、ExternalInterface的callback函数不能被JS正常调用以及FlashVar不能正常传给flash,这些情况基本都是发生在IE下。这其实算是IE中的一个bug,以上问题的解决办法都是一样的:
首先保证<object>和<embed>标签都是存在的,有时候大家会忘记<object>标签,那么在除了IE以外的浏览器就会出问题了,呵呵。
其次<object>和<embed>标签中allowScriptAccess最好都设置为always
然后最关键的一点就是<object>标签中必须设置id属性,且<embed>标签中必须设置name属性,两个属性的值要一样。例如<object id="f_ckIE">...<embed name="f_ckIE">....这样。可以简单的理解为<embed>标签是为IE服务的,而<object>标签是为IE以外的浏览器准备的,呵呵。(插一句embed标签是不符合W3C规范的,而object是标准的标签,f*ck IE。。。。)
最后要注意的是ExternalInterface.call接受的返回值只能是AS中存在的几种类型,也就是Object,Array,String,Number这些了,不能返回递归或者引用,否则只能得到null。
另外:FlashVar需要在<object>和<embed>标签中都要设置。ExternalInterface.call除了用户自定义标签以外只能调用javascript中几个系统全局函数,比如alert和confirm,而window.open这样的函数就不能call了。这里有个技巧,eval其实是可以调用的,嘿嘿。。。。
49.可笑的代码引入处#include
今天写代码,发现了一个很可笑的事.是自己太不注意细节问题了.有一个代码块#include "petAS/NPCAction.as",这里面的代码全是要用到的一堆函数.但这个函数是需要在一个功能代码块里的代码要用到的函数.这样说吧,就是有一个函数function a(){},这个函数是执行一定功能的,而这个函数里要用到NPCAction.as的函数,并且NPCAction.as里的函数不应该是临时函数,以后还会用到.今天就发生个严重的错误就是
function a(){
#include "petAS/NPCAction.as",
}
结果petAS/NPCAction.as里的函数全变成了a函数的临时函数了.所以在_root的时候调用不到了.真郁闷.
而如果petAS/NPCAction.as代码下有一个thingLoad = new Object();而它前面没有var,所以他就是root下的变量,然后在thingLoad下建函数,就可以引用到了.
所以#include 在用的时候需要注意,是否是要用到的全局函数,如果全是函数,哪么在使用之初就要引用.而不是要用到的时候在函数中引用.如果#include 下面有临时变量,或者全局变量,应用的时候就要想清楚在哪引用了.引用还是有个顺序的.
50.通过网页链接index.swf?aaa=变量进行传值的注意之处
如果aaa=传递变量的时候,带有特殊符号"/",".",哪么需要把这些特殊符号进行转码后,再在地址栏输入就可以把变量传进去。如果不这样做,都打不开正确的flash.如果通过正常的网页方式嵌入<param name="movie" value="index.swf?xmlPath_str=resource/xml/wlg/wlgWS.xml" />,而不是通过地址栏传入变量的话,哪么"/","."这些符号不需要进行处理,可以直接传入变量。
51.用xmlToArray此方法解析xml的时候,必须先要让此xml执行ignoreWhite = true;操作
var daishou_xml:XML = new XML();
daishou_xml.ignoreWhite = true;
52.Flash深度的3个区域
新复制出来的仍然覆盖在红色之上
Flash深度共分为3个区域:
● 时间轴区(-16384~-1)
主要用于放置Flash IDE编辑时的图象、MC等,此区域的MC不可以用AS删除,但 可以用AS动态创建MC到这里。
● 动态区(0~1048575)
允许执行时用AS动态创建或删除MC。
● 保留区(1048576~2130690045)
允许执行时用AS动态创建MC,但创建后不可以删除。超出2130690045这个深度的MC是无法用duplicateMovieClip()或attachMovie()创建的。
由于时间轴区和保留区里的MC都不可以动态删除,如要删除,可以先用swapDepths()交换到动态区才删除。
【转自www.bitsCN.com】
53.flash8,as2之前的文本
动态于输入文本的text的换行是\r,哪你想把\r替换掉的话,就需要把得到的text的值转码escape(text),用"%0D"搜就可以搜到并进行替换了。而\r在htmlText里的表现就是</P></TEXTFORMAT>,这就是在text里的\r的表现
54.flash wmode参数详解
在做web开发中可能会遇到flash遮挡页面中元素的情况,无论怎么设置flash容器和层的深度(z-index)也无济于事,现有的解决方案是在插入flash的embed或object标签中加入”wmode”属性并设置为wmode=“transparent”或”opaque”,但wmode属性到底是什么意义,为什么可以解决这个问题呢?
window mode(wmode)
wmode即窗口模式总共有三种,看看当年Macromedia官方的说法:
- Window: Use the Window value to play a Flash Player movie in its own rectangular window on a web page. This is the default value for wmode and it works the way the classic Flash Player works. This normally provides the fastest animation performance.
- Opaque: By using the Opaque value you can use JavaScript to move or resize movies that don’t need a transparent background. Opaque mode makes the movie hide everything behind it on the page. Additionally, opaque mode moves elements behind Flash movies (for example, with dynamic HTML) to prevent them from showing through.
- Transparent: Transparent mode allows the background of the HTML page, or the DHTML layer underneath the Flash movie or layer, to show through all the transparent portions of the movie. This allows you to overlap the movie with other elements of the HTML page. Animation performance might be slower when you use this value.
window 模式
默认情况下的显示模式,在这种模式下flash player有自己的窗口句柄,这就意味着flash影片是存在于Windows中的一个显示实例,并且是在浏览器核心显示窗口之上的,所以flash只是貌似显示在浏览器中,但这也是flash最快最有效率的渲染模式。由于他是独立于浏览器的HTML渲染表面,这就导致默认显示方式下flash总是会遮住位置与他重合的所有DHTML层。
但是大多数苹果电脑浏览器会允许DHTML层显示在flash之上,但当flash影片播放时会出现比较诡异的现象,比如DHTML层像被flash刮掉一块一样显示异常。
Opaque 模式
这是一种无窗口模式,在这种情况下flash player没有自己的窗口句柄,这就需要浏览器需要告诉flash player在浏览器的渲染表面绘制的时间和位置。这时flash影片就不会在高于浏览器HTML渲染表面而是与其他元素一样在同一个页面上,因此你就可以使用z-index值来控制DHTML元素是遮盖flash或者被遮盖。
Transparent 模式
透明模式,在这种模式下flash player会将stage的背景色alpha值将为0并且只会绘制stage上真实可见的对象,同样你也可以使用z-index来控制flash影片的深度值,但是与Opaque模式不同的是这样做会降低flash影片的回放效果,而且在9.0.115之前的flash player版本设置wmode=”opaque”或”transparent”会导致全屏模式失效。
了解了各种模式的实现方式和意义在以后的开发中就可以按照具体情况选择设置wmode属性的值了。
本文链接:http://www.blueidea.com/tech/web/2009/6469.asp