所有的類都是在外部定義,當然如果要使用它們的話,需要設置一下類路徑,點擊發布設置->actionscript2設置,在類路徑里添加你要使用的類路徑就行了,當然如果你希望每個flash都使用那些類,那么可以在"編輯->首選項->actionscript2設置"那添加類路徑。當然如果只是圖個方便的話,直接放到當前文件夾下面就可以了。
在一個.as文件里只能有一個class,而且這個class的name必須和文件名相同。比如有一個motion.as,那么就必須定義一個motion類:
//motion.as
class motion extends MovieClip{
function motion(){
// constructor
}
}
看起來比較死板,但管理起來確實方便了不少。
可以建立一個構造函數(就是跟class同名的函數),這樣實例化的時候就可以調用該函數。
變量的類型
支持private,static和public,private不允許外部訪問和修改,但可以被children讀寫(所以相當于protected),默認如果用var聲明的話,是public,static可以不用實例化,直接使用。
函數的類型
跟變量的類型一樣,也是private,static和public三種,static聲明的可以直接使用,比如Math.random()。靜態函數只能使用靜態變量,其他類型的函數不受影響。
再來講講interface,給我的感覺,interface就是為了方便多人協作,避免某些函數沒有被聲明。
//simpleInterface.as
interface simpleInterface {
function head();
function body();
function foot();
//myClass.as
class myClass implements simpleInterface {
function head(){
trace("I'm head");
}
function body(){
trace("I'm body");
}
function foot(){
trace("I'm foot");
}
}
繼承
繼承的類擁有父類的所有方法和變量(通過extends實現)
//ball擁有mc的所有方法,同時還有自己的fly方法
//ball.as
class ball extends MovieClip{
private var height:Number;
function fly(){
trace("I can fly " height " m");
}
function ball(h){
height = h;
}
}
//時間軸
myball = new ball(30);
myball.fly();//trace "I can fly 30 m"
關于構造函數
如果子類的構造函數沒有顯示調用父類的構造函數,那么flash會自動給你加上,當然也可以通過super()手動加上
也可通過super去調用父類的其他方法,比如super.parentMethod();
如果想讓舞臺上的某個mc使用我們自定義的類的話,在鏈接處的class里天上類名就可以了:
最后來說說文件的管理,最好是新建一個項目,這樣查看起來非常方便。
好了,就說這么多了,有時間附上個demo。
歡迎討論。
附個小demo
ball.as
class ball extends MovieClip {
private var spring:Number = 0.1;
private var friction:Number = 0.95;
private var centerX = (Stage.width-this._width)/2;
private var v:Number = 0;
public function ball() {
_x = 0;
_y = Stage.height/2 - _height/2;
this.onEnterFrame = this.start_spring;
}
private function start_spring() {
var a:Number = (centerX - _x)*spring;
v = a;
//v *= friction;
_x = v;
}
}
在當前路徑下,新建一個mc,然后按下圖:
最后ctrl enter就能看到效果了。
源文件下載:ball.rar
新聞熱點
疑難解答