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