arguments.callee //函数体本身 arguments.caller //触发者 arguments.length //参数长度 Function.apply(thisObject:Object, [argArray:Array]) : Object Function.call(thisObject:Object, [parameter1:Object,parameter2:Object,...]) : Object //----------------------------------------------- //解除递归超过了 256 级限制 //压栈 function pushStacker(n:Number) { if (n>0) { trace(n); stackerArr.push(n-1); } } //出栈 function popStacker() { while (stackerArr.length>0) { var n:Number = stackerArr.pop(); pushStacker(n); } } //定义堆栈 var stackerArr = new Array(); //运行 pushStacker(5000); popStacker(); //----------------------------------------------- //关于TextField.StyleSheet类的内部css的运用 this.createTextField("myText", this.getNextHighestDepth(), 100, 100, 100, 100); var myCSS = new TextField.StyleSheet(); myCSS.setStyle(".textTitle", {color:"#FF0000", fontWeight:"bold"}); //内部运用css样式,这里的有个点符号是个关键,帮助中没提到 myText.html = true; myText.styleSheet = myCSS; myText.htmlText = "

标题

内容"; //----------------------------------------------- //两个解决flash程序中使用快捷键与文本输入冲突的办法 //在flash程序中使用快捷键,就可能会和文本输入引起冲突,主要是用单个字母或者shift+字母键作为快捷键时的冲突,比如当设置字母a为一个功能的快捷方法,但是当你进行文本输入的时候如果输入a就会同时引发事件,当然这不是我们所希望的,下面的两种方法来避免这种情况的出现: //方法一: keylis = new Object(); Key.addListener(keylis); keylis.onKeyDown = function() { var pathArr = Selection.getFocus().split("."); var foucs = _root; for (var i = 1; i=0) { return; } //----------------------------------------------- //flash trace 技巧 var x = "aa"; var y = "bb"; var z = "cc"; trace("x,y,z="+x+","+y+","+z); //一般方法 trace("x,y,z="+[x, y, z]); //技巧方法 //----------------------------------------------- //在Flash裡面自行解譯資料時,使用現成的LoadVars class來解譯变量串 var str:String = "&var1=vcsvfi&var2=vnsjmkvs&"; var parser:LoadVars = new LoadVars(); parser.onData(str); for (var i in parser) { trace("parser["+i+"] : "+parser[i]); } /* parser[loaded] : true parser[var2] : vnsjmkvs parser[var1] : vcsvfi */ //----------------------------------------------- // 变量高效利用写法 //PRIMITIVE STRING a = "Hello World" //调用点语法时先执行 new String("Hello World") //OBJECT STRING a = new String("Hello World") //调用点语法时直接执行 //----------------------------------------------- // 关于 Boolean 变量 Boolean( 0 ) == false Boolean( 1 ) == true Boolean( "0" ) == true Boolean( "1" ) == true Boolean( "true" ) == true Boolean( "false" ) == true Boolean( "Donut" ) == true Boolean( "" ) == false Boolean( undefined ) == false Boolean( Null ) == false Boolean( true ) == true Boolean( false ) == false Boolean( myBoolTrue ) == true Boolean( myBoolFalse ) == true if( "" ){ trace('true') }else{ trace('false') } //true //But... if( Boolean( "" ) ){ trace('true') }else{ trace('false') } //false //----------------------------------------------- // 判断 attachMovie 成功与否 a = MovieClip.prototype.attachMovie; MovieClip.prototype.attachMovie = function() { var mct = MovieClip.prototype.attachMovie.old.apply(this, arguments); trace("Mid attachMovie Execution!"); //test mct for failure or do something else! trace(mct); //绑定成功:_level0.ted 失败:undefined return mct; }; MovieClip.prototype.attachMovie.old = a; delete a; this.attachMovie('ted', 'ted', 0); //----------------------------------------------- // 支持合法的长变量 _level0.cache = {} _level0.cache['http://www.google.com/search?hl=en&lr=&ie=UTF-8&q=Macromedia+Flash&btnG=Search'] = "GOOGLE RESULT DATA" //----------------------------------------------- // now it's possible to trace multiple arguments, without typing trace many times output = function (args) { for (var i = 0; i0) { trace((++k)+":"+temp_array.splice(Math.floor(Math.random()*temp_array.length), 1)); } //----------------------------------------------- // RBG 模式的颜色转换赋值 var mc = new Color(my_mc); var c1 = 23; var c2 = 54; var c3 = 212; var rgb = (c1 << 16 | c2 << 8 | c3); mc.setRBG(rgb); //----------------------------------------------- // movieClip 的变量引用问题 var mc = _root.createEmptyMovieClip("test", 10); mc.removeMovieClip(); trace(mc); // 打印空字符串,mc起指向作用,并没有删除 trace(test); // 打印undefined //trace 方法以及2个字符串相加如果遇到不是 String 的东西解析器会试图调用其 toString() 方法 var o={}; o.toString=function(){return "I'm an object";} trace(o); //I'm an object trace("the object: "+o); //the object: I'm an object //----------------------------------------------- NetStream.onMetaData = function(MetaObject) { //得到Meta信息 for (var i in MetaObject) { trace(i+":"+MetaObject[i]); } }; //----------------------------------------------- //在onload之前执行的事件,和#initclip的形式差不多 onClipEvent(initialize) {} //----------------------------------------------- // MX2004下拉列表框控件添加数据 myComboBox.dataProvider = [ {data:0, label:"January"}, {data:1, label:"February"}, {data:2, label:"March"}, {data:3, label:"April"}, {data:4, label:"May"}, {data:5, label:"June"}, {data:6, label:"July"}, {data:7, label:"August"}, {data:8, label:"September"}, {data:9, label:"October"}, {data:10, label:"November"}, {data:11, label:"December"} ]; //----------------------------------------------- //将mc放置最顶层 Bring to Front Behavior mx.behaviors.DepthControl.bringToFront(mc); //----------------------------------------------- // button skin 按钮外观 import mx.controls.Button; createClassObject(Button,"btn",5,{label:"samstudio",_x:150,_y:130}); button2.falseUpSkin="b1"; button2.falseOverSkin="b2"; button2.falseDownSkin="b3"; button2.falseUpIcon="i1"; //----------------------------------------------- //在制作一个Flash网站时发现用combox组件做的链接会被MyIE和一些阻止弹出窗口的程序阻止。 //寻找原因后发现用onPress事件触发的getURL链接会被阻止,而改为onRelease后一切OK! //被阻止 button1.onPress = function() { getURL("http://www.hzsep.com", _blank); } //不被阻止 button1.onRelease = function() { getURL("http://www.hzsep.com", _blank); } //----------------------------------------------- target.func = function(){ clearInterval(this.intervalID); } clearInterval(target.intervalID); target.intervalID = setInterval(target,"func",1000); //----------------------------------------------- /* 三点建议: 1. 不用的setInterval一定要用clearInterval把timer标识清除掉. 2. n值不宜过高,太高则没有意义,对资源也会有额外浪费. 3. 帧频宜与n值相距不大,帧频*n=1000左右是最好的效果.如果不行,宁愿让帧频高点.setInterval低点. */ // 不同频率的n值时真正的频率 var n:Number=31; var timer:Number; var old:Number=getTimer(); function test() { var m:Number=getTimer(); trace(1000/(m-old)); trace("----------------------------------"); old=m; } timer = setInterval(test, n); //----------------------------------------------- //任何情况下移除mc的方法 var mTemp:MovieClip = this.getInstanceAtDepth(0); mClip.swapDepths(0); mClip.removeMovieClip(); if(mTemp != undefined) { mTemp.swapDepths(0); } //去除Media Playback组件的全屏功能 MediaDisplay实例名._chrome._toggleNE.unloadMovie(); //----------------------------------------------- //承载 SWF 文件的系统和播放器的功能 trace(System.capabilities.screenResolutionX) trace(System.capabilities.screenResolutionY) //关于System.capabilities 对象其他属性摘要可以使用如下代码输出 for(var i in System.capabilities){ trace(i+":"+System.capabilities[i]) } //----------------------------------------------- //鼠标点击捕获 this.onEnterFrame= function() { if (Key.isDown(2)) nextFrame(); //点击鼠标左键时 if (Key.isDown(1)) prevFrame(); //点击鼠标右键时 }; //----------------------------------------------- //冲破强式数据类型 var num:Number=12; trace(num); //12 var num:String="你好" trace(typeof num) //string //等价写法 var num:Number = 12; trace(num); //12 var Temp = "num"; this[Temp] = "你好"; trace(num); //你好 //----------------------------------------------- //Alert當訊息內容過多的時候會無法顯示,可以直接針對Alert裡面的各movieclip作調整: myAlert.__height += 20; myAlert.depthChild0.__height += 20; myAlert.button_mc._y -= 10; //----------------------------------------------- // 加载到 container_mc 的任何 SWF 文件中对 _root 的引用将引用自己的时间轴 // 附加到 container_mc 影片剪辑 onClipEvent (load) { this._lockroot = true; } //----------------------------------------------- //低效率写法: for (var i = 0; i<5; i++) { this["mc"+i]._x = 10; this["mc"+i]._y = 10; } //高效率写法: for (var i = 0; i<5; i++) { var mc = this["mc"+i]; mc._x = 10; mc._y = 10; } //----------------------------------------------- array.prototype.trace=function(){ trace(this.join("."))}; a = [1,2,3,4,5,6,7,8,9]; a.trace(); while (a.length>0){ a.splice(Math.floor(Math.random()*a.length),1) a.trace(); } //----------------------------------------------- //全局函数定义组件的方法 _global.setComs = function(obj) { obj.setStyle("color", 0x003366); obj.setStyle("themeColor", 0xA6CEE3); }; _global.setComs(myComponent); //或 _global.style.setStyle("themeColor", "haloOrange"); //----------------------------------------------- //循环100下的运行速度最快写法 var i = 100; while (i-->0) { } //object的“键-值”查询比for循环快 var xxx = {aaa:12, abc:13, ccc:14}; //object for (var i in xxx) { trace(i+'='+xxx[i]); } trace(xxx["aaa"]); //xxx["aaa"]的值是12 var yyy = [11, 22, 33]; //array for (var i in yyy) { trace(i+'='+yyy[i]); } //----------------------------------------------- //层级间遮罩 loadMovieNum("a.swf", 2); loadMovieNum("c.swf", 3); _level2.setMask(_level3) //----------------------------------------------- //在内部进行测试时,系统键都会被屏蔽,可不要以为代码有误 jt = new Object(); jt.onKeyDown = function(){ if(Key.isDown(Key.ENTER)){ trace("true"); } } Key.addListener(jt); //----------------------------------------------- //监测鼠标滑轮事件 myListener = new Object(); myListener.onMouseWheel = function(delta) { trace("Mouse Wheel Test!\nScroll:"+delta); }; Mouse.addListener(myListener); //返回发布MoiveClip的SWF动画的浏览器的版本号,一个整数 trace(this.getSWFVersion()); //----------------------------------------------- //css定义:红色,大小20px,斜体,下划线 cssText = ".red {color:#ff0000; font-size:20px; font-style:italic; text-decoration: underline;} "; myStyleSheet = new TextField.StyleSheet(); myStyleSheet.parseCSS(cssText); //文本中应用css _root.createTextField("cssTest_txt", 10, 200, 200, 300, 100); cssTest_txt.styleSheet = myStyleSheet; cssTest_txt.htmlText = "CSS Test!"; //遍历一个对象的所有属性 for(var temp in this); trace(temp+":"+this[temp]); //----------------------------------------------- //右键菜单 var my_cm = new ContextMenu(); my_cm.hideBuiltInItems(); my_cm.customItems.push( new ContextMenuItem("Sucy",func_1) ); my_cm.customItems.push( new ContextMenuItem("Alien",func_2) ); my_cm.customItems.push( new ContextMenuItem("Jinni",func_3) ); my_cm.customItems.sort(); function func_1() { trace(" Called Sucy!") } function func_2() { trace(" Called Alien! ") } function func_3() { trace(" Called Jinni! ") } _root.sam_mc.menu = my_cm; MovieClip.getNextHighestDepth() //获得MovieClip内部的一个可用depth值 MovieClip.getInstanceAtDepth(depth) //用来确定指定深度depth是否已被mc占据,返回undefined说明没有mc占据 //----------------------------------------------- //m_mc是本场景movieclip实例,i是父场景变量,写法适用于帧上语句 with (_parent) { this.m_mc.gotoAndPlay(i); } // this["mc"+n].onEnterFrame = function() { //this表示当场场景 this._alpha>0 ? this._alpha-- : delete this.onEnterFrame; //this表示影片夹this["mc"+n] }; //----------------------------------------------- //import 语句仅应用于调用该语句的当前脚本(帧或对象)。 //AS2还是不那么严格,使用[]操作符可以为每个实例增加新的属性,而不管它所属的类是否已经定义了该属性,使用“.”语法则不能 var song:Sound = new Sound( ); song.url = "track3.mp3"; // 错误 song["url"] = "track3.mp3"; trace(song["url"]); // Displays: track3.mp3 //定义全局变量不需要声明变量类型如下所示: _global.varname = value; _global.author:String = "moock"; // 错误 _global.author="moock"; //正确 _root._y = "test"; // 不会提示错误,事实上类型不匹配 var theRoot:MovieClip = _root; theRoot._y = "test"; // 提示类型不匹配 //----------------------------------------------- //Object是所有AS类的基类,它可以被赋值为任何类型的数据 var container:Object = new Date( ); // No error. //打个比方,Object就像人类中的AB血型,可以接受任何类型;而null和undefined就像O型血,可以被任何数据类型接受 //null/undefined可以用来作为函数的占位符 var tf:TextFormat = new TextFormat(null, null, null, true); //----------------------------------------------- //asfunction 协议是特定于 Flash 的一个附加协议,可使内置文本链接调用动作脚本函数 this.createTextField("test_txt", 10, 0, 0, 100, 50); test_txt.html = true; test_txt.htmlText = "Click here"; function myFunction(param) { argumentArray = new Array(); argumentArray = param.split(","); for (i=0; i