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