这都是以往的开发经验,不代表最新的播放器也会有这样的问题,总结一下。看了看以前的日志,发现了一些错误的地方。还有一些地方开发的时候因为规范化越来越好了,所以也没有再出现这样的问题。但还是记一下吧。细节部分将陆续更新。
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," 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)