flash action 詳解(3)_Flash教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:flash action 詳解(2)語法規范---運算符除了要害字,程序語言中最重要的組成部分就是運算符.先不要說我死板,因為不了解這些東西,你什么也做不成.下面是運算符的列表,運算符的
第 2 章: 變量及數據類型---變量---定義變量變量是什么? 大概說來就是存放信息的容器(更確切的說是指向內存空間中某個存貯位置的指針, 不過能夠理解就行了, 何必去記這么抽象的定義). 只要能夠理解它可以存放信息并可以通過各種途徑改變其中的信息就可以了, 我又不是大學里面的老師, 整天就知道叫學生死記硬背定義, 實際的東西一點都沒有, "一切為了考試".
還有一個概念: 什么叫初始化變量? 就是在定義時給它一個有效值以說明它的內容和數據類型. 就像下面的例子, 定義了一個字符串(String)變量:
MyString = "我不懂什么是初始化變量";
就這么簡單, 但是也有要注重的問題:
變量名必須為有效的標識符(例如不能以數字和不答應使用的字符開頭).
變量名不能與 Actions cript 要害字和常量相似或相同.
變量名在它的作用域(Scope)中必須是唯一的(在下面我們會提到什么是作用域).
變量作用域
也就是變量在什么范圍內是可以訪問的. 就似乎在 C&C: Renegade 中的任務一樣, 沒有 Security Level 3 的 ID Card 就進不了安全級別為 3 的區域的.
作用域一般說來有三種: 時間線(Timeline), 局部(Local), 全局(Global).
--------------------------------------------------------------------------------
對于時間線范圍的變量, 就像上面的例子一樣用 = 賦值并聲明, 當然你也可以用 set 動作(Flash 4, 不推薦使用的方法, 除非你覺得代碼不夠長):
set( MyString, "我不懂什么是初始化變量" );
時間線范圍變量聲明后, 在聲明它的整個層級(Level)的時間線內它是可訪問的.
--------------------------------------------------------------------------------
什么是局部變量? 我也經常問自己. 局部變量就是在聲明它的語句塊內(例如一個函數體)是可訪問的變量, 通常是為避免沖突和節省內存占用而使用.
聲明它可以使用 var 要害字:
function LocalVar(){
var MyLocalString = "這是一個局部字符串變量";
trace( "Inside: " MyLocalString );
}
LocalVar();
trace( "Outside: " MyLocalString );
上面的 MyLocalString 字符串變量在函數尾就會被自動清除出內存. 所以在外面的 trace 語句返回結果為空("Outside:"), 而函數體內的 trace 返回:"Inside: 這是一個局部字符串變量".
假如你刪除了 var 要害字, 那么 MyLocalString 就成時間線范圍的變量了. 運行后顯示 Inside 和 Outside 都為 "這是一個局部字符串變量". 在后面的函數一章我們還會提到局部變量的內容.
也許你注重到了函數中有一個 trace 動作. 它可以在測試模式(Testing Movie, CTRL ENTER 組合鍵)下把指定變量的值發送到輸出窗口(Output Window), 以便在運行時檢查處理變量的代碼是否正常. 這是一個非常方便的檢查方法, 在測試代碼時經常使用.
在代碼中假如碰到有不清楚的函數和要害字, 可以通過 Action 面板的參考按鈕(Reference)打開參考面板顯示光標所在位置要害字或內建函數以及對象的具體信息, 也可以通過組合鍵 SHIFT F1 打開它. 下面是參考面板:
全局變量, 顧名思義就是在整個 Movie 中都可以訪問的變量. 它的聲明比較非凡:
_global.MyGlobalString = "這是一個全局字符串變量";
聲明使用了一個 _global 標識符和點語法(Dot Syntax, 將在后面的章節討論). _global 標識符是在 Flash 6 中新增加的, 用于創建全局變量, 函數, 對象和類(Class, 不清楚類是什么的話可以看看 C 的書).
總的來說 _global 是一個與最底層 _level0 并列的對象. 所有的全局變量, 函數, 對象其實就相當于是它的屬性, 方法, 子對象. 關于它的具體內容可以查閱幫助文件, 一般我們只要懂得用就行了.
全局變量會被同名的時間線變量和局部變量屏蔽(Obscured), 這時我們就要通過別的方式來訪問它了. 看看下面的例子:
//定義全局變量
_global.x = "Global";
//一個簡單的函數
function show() {
trace("沒有局部變量時函數內: " x);
var x = "Local";
trace("有局部變量時函數內: " x);
trace("有局部變量時調用時間線變量: " this.x);
}
//測試
trace("------沒有時間線范圍變量時------");
show();
trace("直接調用: " x);
//設置時間線變量
x = "Timeline";
//測試
trace("-------有時間線范圍變量時-------");
show();
trace("直接調用: " x);
trace("有時間線范圍變量時調用全局變量: " _global.x);
由上例的結果可以看出, 在當前時間線范圍內有和全局變量同名的變量時, 直接通過變量名只能訪問時間線范圍內的同名變量, 這時應該用 _global.變量名 來調用全局變量. 同樣局部變量也會屏蔽時間線變量(這時可以用 this.變量名 來調用時間線變量)和全局變量(這時可以用 _global.變量名 來調用全局變量).
在代碼中使用變量
使用變量很簡單, 有點編程基礎的讀者都可以辦到. 下面用一個例子來說明在 Actions cript 中變量的使用:
function vars(x){
if(x<5){ //假如 x 小于 1
x = x 1; //x 加 1
} else {
x = 10; //否則賦值 10
}
trace("x=" x);
return x;
}
vars(2);
vars(6);
trace("x=" x); //測試 x 是否為局部變量
函數聲明中的參數無需加 var 聲明也自動作為局部變量(例如上面例子中的 x). 通過上面例子的最后一句就可以看出來(返回值為空).
我們可以看到, 上面定義的函數中對局部變量 x (在函數參數中聲明)進行了 4 種操作:
賦值: 就是改變變量所存貯的內容.
運算: 使用運算符運算并返回結果. 上例中的 x = x 1 可視為一個運算操作(x 1)和一個賦值操作(x = ...)的復合語句. 對于邏輯運算(上面 if 語句的條件), 返回的為邏輯值 true 或 false(就像 x<5 在 x 為 4 時會返回 true).
函數及命令調用: 就如上面 trace("x=" x); 中的一樣, x 是被作為參數傳遞給函數的, 它代表的是它所存貯的實際內容(在 return x; 中也一樣).
在 Actions cript 中變量的使用具有很大的靈活性, 下面我們將會針對不同的數據類型進行講解.
常見數據類型---字符串 | String
一個字符串就是一系列的字符, 例如 "This" 就是一個字符串.
定義一個字符串變量很簡單, 只要在初始化時將一個字符串數據賦給它就行了:
chapter = "第 2 章";
section = "第 2 節";
section_name = "常見數據類型";
full_name = section " " add section_name 999; //連接字符串
if(typeof(full_name) ne "string"){
full_name = "類型錯誤!";
}
trace("full_name=" full_name);
上面的第 4 行的 full_name 的值是前面兩個變量(section 和 section_name)和一個常量(999)的運算結果(使用了 和 add 運算符, 它們的功能是相同的). 請注重, 這行代碼最后面的數值常量 999 不是同一類型的數據, 假如在 Pascal 這種數據類型檢查極其嚴格的語言中這行代碼是錯誤的. 但是 Actions cript 可以自動將它轉換為字符串格式, 而不需要專門的函數(當然, 最安全的方法是使用 Number 對象的 toString() 函數或是 String() 函數). 由此可見, Actions cript 是一種弱類型檢查的語言(即不嚴格限制各種數據類型間的運算和傳遞), 這和 VB 倒是有點相似, 只不過更過分一點.
在后面我用了一個 if 語句來測試后面加上 999 的代碼是否運行正常(即檢查表達式返回的值是否為字符串, 盡管在實際中并沒有這個必要). 注重我用的是字符串類型專用的邏輯運算符 ne, 當然這只是為了表現字符串數據類型的非凡性, 實際應用中用 != 也就可以了. 對于 typeof 操作符, 我們會在這一章的末尾具體講解
分享:flash action 詳解(1)第1章:代碼格式及規范Actionscript的每行語句都以分號;結束.不同于BASIC語言,Actionscript語句同C,Java,Pascal一樣答應分多行書寫,即答
相關Flash教程:
- 相關鏈接:
- 教程說明:
Flash教程-flash action 詳解(3)
。