思路:
1.使用for...in語句遍歷整個主場景(_root)中所有的對象;
2.找到他們(如_root[k]),並為他們的不同方法指定不同函數;
步驟1: 在主場景放入若干個影片剪輯,不需要為他們起實例名。 步驟2:加入AS代碼:
var F1:Function = function () {
this.startDrag(false);
};
var F2:Function = function () {
this.stopDrag();
};
var F3:Function = function () {
this._rotation = this.speed;
};
//定義三個函數:
// F1完成對象開始拖拽功能;
// F2完成對象停止拖拽功能;
// F3完成對象自轉功能,速度為每個對象各自的speed*/
for (var k in _root) {
_root[k].speed = random(20);
_root[k].onPress = F1;
_root[k].onRelease = F2;
_root[k].onEnterFrame = F3;
}
//遍歷主場景,為每個MC設置speed屬性及onPress,onRelease.onEnterFrame方法。
Flash充電1:兩種定義函數的方法
(1)函數語句定義法:如
function Testadd(a, b) {
return a b;
}
(2)函數表達式定義法:如
var Testadd:Function = function (a, b) {
return a b;
};
平時,應當盡量使用函數語句定義[方法1],這種定義方法更加標准,也更簡捷。區別:方法2,需要先定義、後調用;方法1,可以先調用,後寫定義。
Flash充電2:for...in 用來枚舉一個集合中所有的元素,多用於遍歷(檢索)如:XML,數組,Object甚至_root或MC等等,功能非常強大。本課中,我們用它來遍歷整個_root。
例1:
var Car = {brand:"M6", color:"red", engine:2000};
for (var k in Car) {
trace(k "=" Car[k]);
}
// 輸出結果:
// brand=M6
// color=red
// engine=2000
例2:
//首先,在主場景中放入四個影片剪輯
for (var k in _root) {
trace(_root[k]);
}
//輸出結果:
//_level0.instance4
//_level0.instance3
//_level0.instance2
//_level0.instance1
我們注意到,即使不給_root中的MC命名,FLASH編譯器也自動為MC命名的,前面的_level10指該元件的深度為10.
Flash充電3: .onEnterFrame
(1) onEnterFrame是AS動畫和游戲制作的靈魂。
(2) 當我們在主場景第一幀寫入onEnterFrame=function(){...}時,實際上Flash編譯器會自動在前面加上_root變為_root.onEnterFrame。
(3)重要:MovieClip.onEnterFrame=function(){...}形式。這種形式可以讓MC獨立地運行onEnterFrame。例:
//首先主場景上有三個影片剪輯,實例名分別為MC1,MC2,MC3。//
MC1.speed = random(10);
MC2.speed = random(10);
MC3.speed = random(10);
MC1.onEnterFrame = function() {
MC1._rotation = MC1.speed;
};
MC2.onEnterFrame = function() {
MC2._rotation = MC2.speed;
};
MC3.onEnterFrame = function() {
MC3._rotation = MC3.speed;
};
試想一下如果場景有100個這樣MC那麼寫代碼的過程是不是太痛苦了啊...呵呵...我們看看下面一種寫法:
function F1() {
this._rotation = this.speed;
}
for (var k in _root) {
_root[k].speed = random(10);
_root[k].onEnterFrame = F1;
}
完成的功能相當於:
MC1.speed = random(10);
MC1.onEnterFrame = function() {
this._rotation = this.speed;
};
函數中this指:調用該函數的對象(MC1)