日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

《ActionScript 3.0权威指南》阅读笔记

發(fā)布時(shí)間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《ActionScript 3.0权威指南》阅读笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第二章 ?配置開(kāi)發(fā)環(huán)境 目前,主流的ActionScript 3.0開(kāi)發(fā)環(huán)境分為Flash和Flex兩大類。前者是設(shè)計(jì)和開(kāi)發(fā)一體的集成環(huán)境,后者是嚴(yán)肅的腳本開(kāi)發(fā)平臺(tái),更符合程序猿的析構(gòu)。開(kāi)發(fā)者應(yīng)根據(jù)自己的習(xí)慣和項(xiàng)目的需要,靈活選擇。 Flash cS3建議選擇英文版,它也支持中文注釋和輸入。英文官方文檔較為準(zhǔn)確,更新也很及時(shí)。 代碼的書(shū)寫(xiě)和編輯是在代碼編輯器中進(jìn)行的,使用F9快速打開(kāi)或隱藏。使用代碼編輯器時(shí),需要選擇舞臺(tái)元件。
Adobe FlexBuilder是Adobe官方支持的最完整的RIA開(kāi)發(fā)解決方案,適應(yīng)專業(yè)程序員的開(kāi)發(fā)習(xí)慣。 使用Adobe FlexBuilder 2可以開(kāi)發(fā)出功能強(qiáng)大,結(jié)構(gòu)健壯,跨平臺(tái)的企業(yè)級(jí)應(yīng)用程序,是一個(gè)相對(duì)耗費(fèi)資源的開(kāi)發(fā)環(huán)境。Java虛擬機(jī)運(yùn)行環(huán)境總是對(duì)磁盤(pán)要求甚高。 FlexBuilder基于Java開(kāi)發(fā)環(huán)境,在安裝之前需要先安裝配置好Java運(yùn)行時(shí)環(huán)境。在FlexBuilder安裝包中提供的FlashPlayer可能不是最新的,請(qǐng)從官網(wǎng)下載更新。為了調(diào)試應(yīng)用程序,需要安裝瀏覽器的FlashPlayer Debug版本插件。安裝完成后,應(yīng)及時(shí)檢查瀏覽器的FlashPlayer是否是debug版本。
第三章
FlexBuilder是一個(gè)很優(yōu)秀的代碼編寫(xiě)工具,其提供的代碼提示要比Flash強(qiáng)大很多。使用FlexBuilder彈出的相關(guān)代碼提示窗口,可以快速而無(wú)錯(cuò)的編寫(xiě)代碼 工具欄中的綠色運(yùn)行按鈕,快捷鍵Ctrl+F11,編譯并在瀏覽器中執(zhí)行,不僅編譯了應(yīng)用程序,還生成了相關(guān)的HTML文件,所以在瀏覽器中看到的是嵌入HTML文件的SWF應(yīng)用。可以勾選自動(dòng)編譯。
Flex程序有自己的規(guī)范和構(gòu)成 與Flash不同,Adobe公司為Flex設(shè)計(jì)了一種新的文件結(jié)構(gòu):MXML。FlexBuilder的程序,一般都由三部分組成:MXML,ActionScript, Flex類庫(kù)。這三者本質(zhì)上,依然是使用ActionScript 3.0實(shí)現(xiàn)的。 MXML主要為用戶界面組建布局,并記錄和存儲(chǔ)這些信息。負(fù)責(zé)記錄界面的布局信息。它是XML 1.0語(yǔ)言,由一系列標(biāo)簽和標(biāo)簽屬性組成。 數(shù)據(jù)塊標(biāo)簽:<![CDATA[......]]> 塊注釋: <!--注釋部分--> 對(duì)于MXML應(yīng)用程序,一般總有一個(gè)最外層的標(biāo)簽<mx:Application>,Application標(biāo)簽定義了一個(gè)應(yīng)用程序,命名空間的命名一般都放在這里,mx是命名空間,內(nèi)部的標(biāo)簽都可以使用該命名空間 MXML組件文件,一般會(huì)有一個(gè)最外層的<mx:Canvas>,它是一個(gè)容器,包含HBox,VBox,x坐標(biāo),y坐標(biāo) 標(biāo)簽名稱以大寫(xiě)字母開(kāi)頭,標(biāo)簽屬性以小寫(xiě)字母開(kāi)頭,都可以大小寫(xiě)混合。屬性需要加上雙引號(hào)。 在MXML語(yǔ)言中,創(chuàng)建組件和調(diào)整組件屬性都非常簡(jiǎn)單,形式如下 <mx:組件名稱 屬性1="數(shù)值"?屬性2="數(shù)值"?屬性3="數(shù)值"> Flex的組件種類更加全面,功能更加強(qiáng)大,是對(duì)Flash基礎(chǔ)類的整合和加強(qiáng)。 使用MXML構(gòu)造用戶界面非常便捷,創(chuàng)建組件,改變組件外觀,移動(dòng)組件位置,都簡(jiǎn)化為操作相應(yīng)的標(biāo)簽和屬性。MXML設(shè)計(jì)目的之一就是令外觀樣式的設(shè)計(jì)和代碼的邏輯實(shí)現(xiàn)分析,也就是表現(xiàn)層和邏輯層的分離。利用這一特性,程序部門(mén)和美術(shù)部門(mén)可以同步工作,互不影響。一旦應(yīng)用需求確定了,只需要快速地開(kāi)發(fā)出“原型界面”,確定交互部分各組件的ID,程序部門(mén)就可以進(jìn)行深入的開(kāi)發(fā)和調(diào)試,而美術(shù)部門(mén)可以依據(jù)確定的組件ID,自由調(diào)整界面的布局和風(fēng)格。
應(yīng)用程序的邏輯是利用ActionScript 3.0來(lái)控制,它是Flex程序的靈魂。類庫(kù)是開(kāi)發(fā)軟件自身提供的一些常用功能代碼的集合,Flex類庫(kù)是ActionScript 3.0編寫(xiě)的,包含組件(容器和控件),管理器類,數(shù)據(jù)服務(wù)類和所有其它功能的類庫(kù)。 上述三者相結(jié)合,產(chǎn)生最終編譯得到的swf文件。一個(gè)應(yīng)用程序?qū)?yīng)一個(gè)swf文件
使用FlexBuilder的MXML構(gòu)建"Hello World"應(yīng)用程序 應(yīng)用程序舞臺(tái)的左上角是坐標(biāo)系的原點(diǎn)(0,0) 在屏幕上輸出文本 <mx:Text x="50" y="20" text="Hello World" id="mytxt">
用戶不僅能描述界面元素,還能包含腳本代碼 添加標(biāo)簽事件響應(yīng) 事件和響應(yīng),可以簡(jiǎn)單理解為,條件和結(jié)果的關(guān)系 編譯器將MXML編譯為ActionScript,再將ActionScript編譯為二進(jìn)制的SWF文件
ActionScript的內(nèi)聯(lián),級(jí)聯(lián)和外聯(lián) <mx:Script source="/Hellofunc.as"></mx:Script>
FlexBuilder中的輔助設(shè)計(jì)模式,其實(shí)本質(zhì)上就是MXML的可視化編輯器,都是以MXML記錄保存的。 MXML文件的設(shè)計(jì)模式只解釋MXML文件內(nèi)部的可視化標(biāo)簽,可以在設(shè)計(jì)模式下調(diào)整組件的屬性。 在代碼編輯器中打開(kāi).mxml文件,在Source和Design標(biāo)簽之間切換, 在編譯包含眾多復(fù)雜控件標(biāo)簽的項(xiàng)目時(shí),編譯過(guò)程還會(huì)很長(zhǎng)。較長(zhǎng)的編譯過(guò)程,是swf文件執(zhí)行效率提高的重要保證。
與更改代碼的程序員和更改設(shè)計(jì)視圖的設(shè)計(jì)人員合作,開(kāi)發(fā)您的應(yīng)用程序。 用戶界面開(kāi)發(fā)者布局 UI、匯集 MXML 組件、提供某些輕邏輯,并可以在無(wú)需進(jìn)行客戶端數(shù)據(jù)處理的情況下連接到后端數(shù)據(jù)源。
對(duì)于Flash CS3創(chuàng)建的默認(rèn)空白項(xiàng)目,總是擁有一層layer和一幀frame。從某種程度上,Flash是利用幀保存腳本。在Flash CS3中,ActionScript 3.0要求所有的代碼都必須寫(xiě)在幀上。寫(xiě)在不同的位置,代碼的作用范圍也不同。 前面幀上的ActionScript無(wú)法訪問(wèn)后續(xù)幀的ActionScript,但是后續(xù)幀上的ActionScript能訪問(wèn)當(dāng)前幀的所有ActionScript。代碼總是寫(xiě)在當(dāng)前激活的幀上。如果選中的幀不止一個(gè),則代碼會(huì)寫(xiě)在選中幀的第一幀。
trace()語(yǔ)句是調(diào)試語(yǔ)句,它的功能是將括號(hào)內(nèi)的內(nèi)容輸出到Flash IDE的調(diào)試輸出窗口中。 凡是指定了ID的舞臺(tái)元件,都可以使用ActionScript控制。舞臺(tái)元件有其特殊性,并不是代碼所在幀之前指定的舞臺(tái)元件都能訪問(wèn)。如果在代碼所在幀的時(shí)間點(diǎn)上,該舞臺(tái)元件不存在,則代碼依然不能訪問(wèn)。 操作動(dòng)態(tài)舞臺(tái)對(duì)象的屬性使用,對(duì)象ID.屬性方式訪問(wèn)。Flash中的坐標(biāo)系以舞臺(tái)左上角為原點(diǎn),y軸向下為正方向。 ActionScript要求,任何對(duì)象,只有加入到顯示列表中,才會(huì)被顯示在舞臺(tái)上。顯示列表是一個(gè)樹(shù)狀結(jié)構(gòu),最頂端的是舞臺(tái)對(duì)象stage。任何在舞臺(tái)上顯示的對(duì)象,在顯示列表中都是stage根節(jié)點(diǎn)的分支,使用addChild()將顯示對(duì)象加入顯示列表中。 stage.addChild() 簡(jiǎn)化為?addChild()
第四章 語(yǔ)法基礎(chǔ)結(jié)構(gòu)
ActionScript 3.0是一種基于ECMAScript ed4規(guī)范的腳本語(yǔ)言,其基本語(yǔ)法構(gòu)成包括標(biāo)識(shí)符,關(guān)鍵字,數(shù)據(jù)類型,運(yùn)算符和分隔符。 這些有著特定含義的專有名稱叫做標(biāo)識(shí)符。按照定義的場(chǎng)所,標(biāo)識(shí)符分為兩類:語(yǔ)言內(nèi)建標(biāo)識(shí)符(變量,類,函數(shù)的名稱)和用戶自定義標(biāo)識(shí)符。比如: decodeURIComponent(), gotoAndPlay() 掌握標(biāo)識(shí)符的命名規(guī)則非常重要,包括如下幾點(diǎn): (1)所有標(biāo)識(shí)符大小寫(xiě)敏感 (2)必須英文字母或者_(dá)開(kāi)頭,數(shù)字等不能開(kāi)頭 (3)標(biāo)識(shí)符應(yīng)由0-9,A-Z,a-z和_構(gòu)成,不應(yīng)使用其他特殊符號(hào) (4)不能與ActionScript 3.0內(nèi)建關(guān)鍵字沖突,參見(jiàn)附表 (5)考慮到代碼未來(lái)的復(fù)用性,盡量避免使用保留字,參見(jiàn)附表
命名約定 (1)保持自然語(yǔ)義,如totalNumber,FirstName (2)保持標(biāo)識(shí)符的術(shù)語(yǔ)統(tǒng)一 (3)利用縮寫(xiě)前綴,增強(qiáng)代碼可讀性 (4)規(guī)范利用大小寫(xiě),標(biāo)識(shí)符主要使用小寫(xiě)字符,但可以利用大小字母分割單詞,比如addLastNode(),在標(biāo)識(shí)符中使用數(shù)字時(shí),一般使用_將字母和數(shù)字區(qū)分開(kāi);常數(shù)可以全部大寫(xiě) (5)保持標(biāo)識(shí)符首字母小寫(xiě),便于使用代碼輸入器自動(dòng)補(bǔ)全 (6)避免長(zhǎng)標(biāo)識(shí)符,盡量10字符以內(nèi),照顧代碼編輯器的格式和編譯器的編譯速度 (7)避免相似名稱, (8)保持標(biāo)識(shí)符的格式統(tǒng)一,比如last_field,current_field, first_field這些
關(guān)鍵字 按照功能不同,ActionScript 3.0中的關(guān)鍵字可以分為:表達(dá)式關(guān)鍵字,語(yǔ)句控制,屬性關(guān)鍵字,定義關(guān)鍵字,編譯指令,保留字 (1)表達(dá)式: false,true,null,this,Infinity -Infinity,NaN null不同于_undefined NaN 表示非數(shù)字 (2)語(yǔ)句控制 for,while,if,switch,throw,try,break, case, for...in 遍歷對(duì)象的動(dòng)態(tài)屬性或是數(shù)組中的元素,并對(duì)每個(gè)屬性或是元素執(zhí)行statement with 建立要用于執(zhí)行一條或是多條語(yǔ)句的默認(rèn)對(duì)象 (3)定義 最基礎(chǔ)最常用的是關(guān)鍵字var,用以指定一個(gè)變量 ...param 指定函數(shù)將接受任意多個(gè)以逗號(hào)分隔的參數(shù) (4)屬性關(guān)鍵字,用于操作變量或者對(duì)象的訪問(wèn)訪問(wèn) dynamic,final,internal,native,override,private,protected,public,static, (5)編譯指令 包括一組在編譯時(shí)起作用的關(guān)鍵字,主要是輔助ActionScript 3.0的編譯器,幫助編譯器正確的處理和分析代碼 defaultxmlnamespace ?指定默認(rèn)的命名空間 usenamespace? import ?使外部類或是包可用于您的代碼 include 將過(guò)長(zhǎng)的代碼文件分塊存儲(chǔ),便于代碼的管理操作
區(qū)分:import和include是兩個(gè)功能完全不同的關(guān)鍵字 import關(guān)鍵字僅僅是引領(lǐng)編譯器找到外部類的定義,所以編譯器不會(huì)破壞out.as文件的內(nèi)容; include關(guān)鍵字執(zhí)行的是文本操作層面的命令,只是簡(jiǎn)單地將外部文件的內(nèi)容插入include位置,而import關(guān)鍵字提供的是程序邏輯層面的功能,用于在多個(gè)文件之間共享類的聲明。 二者之間有著根本的區(qū)別,不能換用,也不應(yīng)混淆。


(6)類的長(zhǎng)名稱 類的長(zhǎng)名稱并不是指類的名字比較長(zhǎng),而是指類的隸屬關(guān)系比頂級(jí)類要深。 Point類,長(zhǎng)名稱卻是flash.geom.Point AS3借助包管理類的定義文件,每個(gè)包對(duì)應(yīng)相應(yīng)級(jí)別的同名文件夾。利用類的長(zhǎng)名稱,編譯器能更準(zhǔn)確的找到類的定義,并做進(jìn)一步編譯。 在ActionScript 3.0中,也可以使用通配符*包含整個(gè)包。這會(huì)降低編譯器的效率,增加編譯時(shí)間。 借助開(kāi)發(fā)輔助工具,并不需要經(jīng)常關(guān)心類和包的結(jié)構(gòu)關(guān)心。

Class和Package
數(shù)據(jù)類型 ActionScript 3.0的數(shù)據(jù)類型包含兩個(gè)大集合: 基元值 包括Boolean,int, Number,String和uint 復(fù)雜值 Array,Date,Error,Function,RegExp,XML和XMLList 還允許用戶自定義數(shù)據(jù)類型,它屬于復(fù)雜值集合。參見(jiàn)P121表4-6
ActionScript 3.0第一種完全的面向?qū)ο蟮恼Z(yǔ)言,基元值和復(fù)雜值都被視為對(duì)象。 Number數(shù)據(jù)類型可以表示整數(shù),無(wú)符號(hào)整數(shù)和浮點(diǎn)數(shù)。為了盡可能提高性能,應(yīng)將Number數(shù)據(jù)類型僅用于浮點(diǎn)數(shù),或者用于int和uint類型無(wú)法存儲(chǔ)的大于32位的整數(shù)值。
void數(shù)據(jù)類型僅包含一個(gè)值:“undefined”,表示未聲明類型的變量類型。 字面值是最簡(jiǎn)單的數(shù)據(jù)形式,是直接出現(xiàn)在代碼中的值 在ActionScript 3.0中,聲明變量必須使用var關(guān)鍵字顯式聲明。 var 變量名標(biāo)識(shí)符:數(shù)據(jù)類型 通常,在聲明變量的同時(shí)為變量賦值的方法,在創(chuàng)建數(shù)組或是實(shí)例化類的實(shí)例時(shí)最為常用。
變量的作用域 變量的作用域是指,能夠通過(guò)引用變量名來(lái)訪問(wèn)相應(yīng)變量值的代碼區(qū)域。全局變量是指在代碼的所有區(qū)域都能訪問(wèn)的變量,局部變量是指盡在代碼某個(gè)部分方能訪問(wèn)的變量。 變量的作用域同變量的聲明位置息息相關(guān)。
多級(jí)條件流程 for...in循環(huán)是for循環(huán)的變體。循環(huán)的運(yùn)行將基于復(fù)雜對(duì)象的屬性遍歷。 var myArray:Array = {1, "two", true}; for (var i:String in myArray) { trace("Array child : " + i); trace(myArray[i] + " is :"+ typeof(myArray[i])); }
函數(shù)的定義 函數(shù)在ActionScript中始終扮演著極為重要的角色,將有效的輸入值變換為唯一的輸出值 在ActionScript 3.0中可通過(guò)兩種方法定義函數(shù),使用函數(shù)語(yǔ)句和使用函數(shù)表達(dá)式。函數(shù)語(yǔ)句總是以function關(guān)鍵字開(kāi)頭。在函數(shù)語(yǔ)句中,包含函數(shù)的四個(gè)要素: (1)函數(shù)名,不可以重載 (2)參數(shù),逗號(hào)分隔,參數(shù)列表 (3)函數(shù)體,{}括起來(lái)的AS3代碼部分 (4)返回值,只能有一個(gè) 在ActionScript 3.0中函數(shù)的定義位置非常寬松,編譯器會(huì)像對(duì)待變量聲明一樣對(duì)待函數(shù)定義。函數(shù)的定義聲明將被提升。
arguments對(duì)象可以代指函數(shù)的參數(shù)列表。它本身是一個(gè)數(shù)組,儲(chǔ)存了函數(shù)的所有參數(shù)。
第六章 面向?qū)ο缶幊?/span>
本章著重介紹面向?qū)ο蟮囊话阈愿拍詈椭R(shí)。掌握了這些,就等于打開(kāi)了ActionScript 3.0內(nèi)部寶庫(kù)的金鑰匙。 從根本上講,OOP是一種基于過(guò)程和邏輯的編程模式。面向過(guò)程的模式是一種最基本的開(kāi)發(fā)模式。面向?qū)ο蟮木幊棠J絼t強(qiáng)調(diào)將問(wèn)題分解為不同的模塊,用類和對(duì)象的概念去分析和組織。
包和命名空間是兩個(gè)相關(guān)的概念,包的名稱類似于命名空間,在包內(nèi)聲明的對(duì)象具有相同的包命令空間。 可以有多個(gè)對(duì)象共同屬于同一個(gè)包。 通常,import語(yǔ)句越具體越好,建議避免導(dǎo)入該類所屬的整個(gè)包,因?yàn)檫^(guò)多的導(dǎo)入類會(huì)增加編譯器的搜索負(fù)擔(dān),降低編譯效率 在正確導(dǎo)入類或是包之后,可以使用類的完全限定名稱,也可以只使用類名稱本身,建議使用后者 包的機(jī)制可以完美地區(qū)分不同包中的同名類。包的使用是必要的技術(shù)。
包和命名空間 在ActionScript 3.0中,包是用命名空間實(shí)現(xiàn)的,但包和命名空間并不同義。使用命名空間同包沒(méi)有必然的關(guān)系,它們既不共生,也不排斥。 包可用于組織類文件。 每個(gè)包可以包含許多各類文件,這些類文件都應(yīng)該存儲(chǔ)在同一個(gè)文件夾下面。每一個(gè)類文件聲明一個(gè)公共類,該類的名稱同該文件的名稱相同。 如果要訪問(wèn)某個(gè)包中的某個(gè)類,則編譯器將按照包的名稱查找路徑中的相應(yīng)文件夾,然后在該文件夾中搜索以該類名稱命名的as文件。Flash就采取的是這種策略管理類文件。
區(qū)分包的概念和類繼承 具有繼承關(guān)系的類可以分布于同一個(gè)包中,也可以分布于多個(gè)包中。同時(shí),位于同一個(gè)包中的兩個(gè)類僅是具有共同的命名空間,其它方面都不必相關(guān)。 創(chuàng)建包時(shí),該包的所有成員的默認(rèn)訪問(wèn)說(shuō)明符時(shí)internal,默認(rèn)僅對(duì)所在包的其它成員可見(jiàn)。如果希望某個(gè)類對(duì)包外部的代碼可用,則必須將該類聲明為public。
利用包組織代碼 包的特性決定了它最重要的作用是組織代碼并防止命名沖突。 允許一個(gè)源文件中包括多個(gè)類,每個(gè)文件中應(yīng)該只有一個(gè)類可供該文件外部的代碼使用。這些類將僅在該文件中可用,對(duì)該源文件外部的代碼,它們不可見(jiàn)。 包的樹(shù)狀結(jié)構(gòu)對(duì)應(yīng)文件存儲(chǔ)系統(tǒng)的文件夾樹(shù)狀結(jié)構(gòu)。多級(jí)別包結(jié)構(gòu)使用.運(yùn)算符,類似java,比如類 global.content.terra.civ 對(duì)應(yīng)文件global/content/terra/civ.as,可以用包將代碼組織成直觀的分層結(jié)構(gòu),以供其他程序員使用。
import視為編譯器的指向牌,幫助編譯器尋找類的聲明。 ActionScript 3.0在包,類和源文件的組織方式上具有很大的靈活性。
繼承訪問(wèn)控制 四個(gè)內(nèi)建的訪問(wèn)控制關(guān)鍵字 public,protected,private,internal public屬性,對(duì)所有位置的代碼可見(jiàn) protected屬性,對(duì)子類可見(jiàn),不管子類和基類是否在同一個(gè)包中 private屬性,對(duì)本類可見(jiàn),子類不可見(jiàn) internal屬性,對(duì)同一包中的子類可見(jiàn)
方法的繼承覆蓋 類繼承機(jī)制僅支持繼承覆蓋,使用override聲明,靜態(tài)方法不能繼承,也不能覆蓋。 繼承覆蓋需要具備兩個(gè)條件: 該方法必須是可以改寫(xiě)的,就是不能使用final關(guān)鍵字聲明。 該方法必須是子類可以訪問(wèn)的,不能使用private關(guān)鍵字聲明 ActionScript 3.0的編譯器僅根據(jù)參數(shù)數(shù)量與參數(shù)順序辨別方法,并不參考參數(shù)的名稱。
屬性的繼承覆蓋 非私有的實(shí)例屬性可以被繼承,但是不能被覆蓋。只有聲明靜態(tài)成員時(shí),可以不理會(huì)父類中的同名屬性。 靜態(tài)屬性必須使用類的名稱來(lái)訪問(wèn),而不是實(shí)例的名稱。這樣在代碼調(diào)用成員時(shí),不可能出現(xiàn)靜態(tài)成員同實(shí)例成員的混淆。 唯一可以覆蓋的成員是方法成員,也就是那些使用function關(guān)鍵字聲明的成員。鑒于方法重載的諸多限制,所以在子類中重載父類的setter/getter存取器并不能完成重新定義屬性成員的任務(wù)。
關(guān)鍵字super 關(guān)鍵字super提供了對(duì)父類的直接引用,使用使用super()調(diào)用父類的構(gòu)造函數(shù),也可以使用super.成員名稱的形式引用父類的成員。 注意: super關(guān)鍵字僅保留距離被引用子類最近的父類的引用,不能講super理解為父類的引用。將super關(guān)鍵字連用以訪問(wèn)繼承樹(shù)頂層的基類,是不成立的。 在子類的構(gòu)造函數(shù)中,可以使用super()的形式顯式調(diào)用父類的構(gòu)造函數(shù),也可以省略,編譯器會(huì)自動(dòng)在構(gòu)造函數(shù)的第一行之前添加super()。顯式添加的優(yōu)勢(shì)是,能夠人工的控制調(diào)用父類構(gòu)造函數(shù)的時(shí)機(jī), 這在有些代碼中是非常關(guān)鍵的。 在子類構(gòu)造函數(shù)中任何形如super.成員名稱的調(diào)用都應(yīng)該在調(diào)用super()之后出現(xiàn),否則后果不可預(yù)料。
多態(tài) 多態(tài)就是讓這些不同行為的方法采用同一個(gè)方法名。這里偏重廣義的多態(tài),指根據(jù)不同的類使用相同方法名。嚴(yán)格意義上應(yīng)該視作一種繼承覆蓋。 使用繼承實(shí)現(xiàn)多態(tài),具體的實(shí)現(xiàn)方式是允許子類繼承和重新定義并覆蓋基類中的方法。 ActionScript 3.0的類繼承是以覆蓋形式實(shí)現(xiàn)對(duì)父類同名方法的改寫(xiě)。
靜態(tài)成員和作用域鏈 只能通過(guò)定義靜態(tài)成員的類名稱來(lái)訪問(wèn)靜態(tài)屬性, 類名稱.靜態(tài)成員名稱。 允許使用與靜態(tài)屬性相同的名稱定義實(shí)例屬性。可以在靜態(tài)屬性所在的類中定義同名實(shí)例成員,也可以在子類中定義同名的實(shí)例成員。調(diào)用時(shí),同名實(shí)例成員的優(yōu)先級(jí)更高。 在定義靜態(tài)屬性的類體及該類的任何子類中,可直接訪問(wèn)靜態(tài)成員,而不必拘泥于“類名稱.靜態(tài)成員名稱”形式。 靜態(tài)成員總是比實(shí)例成員更靠前,更優(yōu)先被調(diào)用,但是使用類名稱.靜態(tài)成員名稱也可以準(zhǔn)備訪問(wèn)到靜態(tài)成員。
面向?qū)ο筮M(jìn)階 這些內(nèi)容比較抽象,需要具備一定的理論基礎(chǔ)。但是在程序開(kāi)發(fā)中又屬于常見(jiàn)內(nèi)容。
聯(lián)合繼承 聯(lián)合繼承,就是一個(gè)子類可以同時(shí)擁有多個(gè)父類。通過(guò)子類,便可以將多個(gè)父類聯(lián)合起來(lái),在子類中共享多個(gè)父類的機(jī)能。 一個(gè)父類可以擁有多個(gè)派生類,一個(gè)派生類可以具有多個(gè)父類。 聯(lián)合繼承得到的子類應(yīng)該包含任何一個(gè)父類的共用成員,這就使子類可以充當(dāng)父類的角色。 聯(lián)合繼承的問(wèn)題 支持聯(lián)合繼承的語(yǔ)言中,都會(huì)引入嚴(yán)格的封包機(jī)制,以限制名稱訪問(wèn)的沖突,聯(lián)合繼承在運(yùn)行時(shí)的開(kāi)銷(xiāo)非常大。 下面的寫(xiě)法是錯(cuò)誤的
class multi_inherit extends base1, base2{}
在ActionScript 3.0中,聯(lián)合繼承沒(méi)有得到直接的支持,但是利用接口概念可以變相實(shí)現(xiàn)聯(lián)合繼承。
接口的概念 接口是一種特殊的類,只包含方法的聲明,沒(méi)有方法的實(shí)現(xiàn)。利用普通類將接口中的聲明實(shí)現(xiàn),稱為實(shí)現(xiàn)接口。該類相應(yīng)稱為接口的實(shí)現(xiàn)。 接口類似C++語(yǔ)言中的h文件,具體的實(shí)現(xiàn)要在cpp文件中提供。
接口和接口的實(shí)現(xiàn)不是繼承關(guān)系,一個(gè)接口的多個(gè)實(shí)現(xiàn)可以是完全不相關(guān)的類,而接口的作用就是零這些不相關(guān)的對(duì)象具有通用的方法,能夠方便地彼此通信。 ActionScript 3.0的核心類隨著Flash和Flex的發(fā)布,供全世界開(kāi)發(fā)者重復(fù)使用。核心類的設(shè)計(jì)原則之一就是方法名稱的統(tǒng)一。 FlashPlayerAPI定義了IEventDispatcher接口,其中包含的方法聲明可供類處理事件對(duì)象。 public interface IEventDispatcher{} EventDispatcher類實(shí)現(xiàn)了IEventDispatcher接口。 public class EventDispatcher implements IEventDispatcher{}
采用接口比在基類中定義空函數(shù)擁有更廣泛的用途。在基類中定義空函數(shù),只能保證繼承樹(shù)內(nèi)的類可以使用,接口不參與繼承機(jī)制,不必受繼承樹(shù)的限制。 不同繼承樹(shù)中的類,可以是同一接口的不同實(shí)現(xiàn)。 在調(diào)用時(shí),可以查詢一個(gè)類是否是某個(gè)接口的實(shí)現(xiàn)。 接口是一種抽象類,接口可以歸屬于任何包中,接口定義應(yīng)該位于包的頂級(jí),接口不能嵌套。可以為接口指定命名空間,在一個(gè)包中,可以包含多個(gè)接口。 一個(gè)接口內(nèi),可以提供多種方法。接口中的方法應(yīng)盡量避免與可能的類名稱沖突。接口中定義的方法聲明不能包含任何訪問(wèn)控制說(shuō)明符(public, private等),也不要包含final關(guān)鍵字。 只能使用public和internal訪問(wèn)控制說(shuō)明符來(lái)修飾接口定義。
接口和類的最大區(qū)別是: 接口中不能包含變量和常數(shù),如果要提供對(duì)屬性成員操作的統(tǒng)一限制,建議在方法內(nèi)包含setter和getter存取器,存取器將被視作方法看待。 接口可以繼承,使用extends關(guān)鍵字,支持聯(lián)合繼承,一個(gè)接口可擴(kuò)展為一個(gè)或多個(gè)其他接口,只要逗號(hào)分隔開(kāi)就行。
FlashPlayerAPI遵循一種約定,接口名都以大寫(xiě)字母I開(kāi)始。
接口實(shí)現(xiàn) 在ActionScript 3.0中,接口需要使用類實(shí)現(xiàn)。實(shí)現(xiàn)某個(gè)接口的類,與普通類沒(méi)有本質(zhì)區(qū)別 class 類名 implements 接口名{ //類體 } 在一個(gè)類中,可以聯(lián)合使用implements和extends關(guān)鍵字。聯(lián)合接口實(shí)現(xiàn)類將兩個(gè)接口的方法整合在一個(gè)類中。過(guò)分別通過(guò)這兩個(gè)接口的檢測(cè)。
接口方法實(shí)現(xiàn)遵循的原則 相同方法名 參數(shù)匹配 返回值一致 公共訪問(wèn)權(quán)限
在運(yùn)行時(shí)對(duì)接口進(jìn)行選擇,檢測(cè)接口需要使用ActionScript 3.0內(nèi)建的關(guān)鍵字is或是as,注意是實(shí)例不是類名稱的檢測(cè)。 trace(nearbycafe is Iservice);
is和as在檢查接口時(shí)效果是一樣的,區(qū)別在于: 當(dāng)檢查成功,is返回true,as返回該對(duì)象本身;當(dāng)檢查失敗時(shí),is返回false,as返回null 關(guān)鍵字instanceof不能檢測(cè)接口及接口的實(shí)現(xiàn)。
接口使用技巧 利用接口的聯(lián)合來(lái)實(shí)現(xiàn)類的聯(lián)合繼承(變相實(shí)現(xiàn))。利用include分離公共接口代碼實(shí)現(xiàn),做到重用。
抽象類的內(nèi)部機(jī)制 ActionScript 是一種基于原型的語(yǔ)言, 類和對(duì)象逐漸成為腳本語(yǔ)言的核心內(nèi)容。ActionScript 3.0引入了新的繼承對(duì)象:traits對(duì)象。 深入研究使我們始終不能回避一個(gè)問(wèn)題: ActionScript 3.0中類的本質(zhì)是什么? 在ActionScript 3.0中,有兩種構(gòu)建類的方法,一種方法是利用class關(guān)鍵字,另一種是傳統(tǒng)的方式,利用function關(guān)鍵字,兩種方式的結(jié)果一樣。 (以后需要仔細(xì)研究)
動(dòng)態(tài)類 動(dòng)態(tài)庫(kù)是一種特殊類,具有開(kāi)發(fā)式的成員定義機(jī)制。未使用dynamic關(guān)鍵字定義的普通類稱為封裝類。 創(chuàng)建動(dòng)態(tài)類的實(shí)例時(shí),會(huì)為其創(chuàng)建一個(gè)Hash表,用來(lái)記載動(dòng)態(tài)添加的成員,Hash表將占用額外的內(nèi)存。 動(dòng)態(tài)類僅允許修改類的對(duì)象,為對(duì)象添加成員,并不能改變類定義本身,不能為類添加動(dòng)態(tài)成員。 動(dòng)態(tài)添加的屬性僅限當(dāng)前實(shí)例使用,并不能在類的所有對(duì)象實(shí)例中分享。在運(yùn)行時(shí)動(dòng)態(tài)添加,在編譯時(shí)并不存在。動(dòng)態(tài)成員不享有類內(nèi)部成員的待遇,不能訪問(wèn)類的私有成員。 dynamic屬性不由子類繼承,若動(dòng)態(tài)類作為基類,其子類不自動(dòng)具備動(dòng)態(tài)性。只有添加了dynamic關(guān)鍵字,動(dòng)態(tài)類的子類才是動(dòng)態(tài)的。動(dòng)態(tài)成員僅在運(yùn)行時(shí)添加,在編譯階段不能檢查其數(shù)據(jù)類型。 在運(yùn)行時(shí),由Flash Player會(huì)對(duì)動(dòng)態(tài)成員進(jìn)行類型檢查,使用動(dòng)態(tài)成員要非常小心,以免引發(fā)運(yùn)行時(shí)錯(cuò)誤。
使用dynamic關(guān)鍵字定義動(dòng)態(tài)類 添加的動(dòng)態(tài)成員可以是屬性,也可以是方法。執(zhí)行效率比內(nèi)部方法低。
動(dòng)態(tài)方法 動(dòng)態(tài)方法必須以函數(shù)表達(dá)式的形式添加。具體而言,有三種方式。 函數(shù)語(yǔ)句 函數(shù)變量 函數(shù)表達(dá)式 直接使用函數(shù)表達(dá)式對(duì)動(dòng)態(tài)類的動(dòng)態(tài)成員賦值。
成員檢查 使用關(guān)鍵字in執(zhí)行成員檢查,保證成員不被非法訪問(wèn),用法如下: 實(shí)例成員名稱 in 對(duì)象名稱 靜態(tài)成員名稱 in 類名稱 使用in關(guān)鍵字只能檢測(cè)到可訪問(wèn)的公共成員 使用in來(lái)判斷數(shù)組是否包含某個(gè)索引號(hào)的元素,或是是否含有某個(gè)字符串 var myary:Array=new Array(12,31,34); trace(2 in myary); //true trace(5 in myary); //false
Talii.qiaqia=105; var mystr:String="qiaqia"; trace(mystr in Talii);
刪除動(dòng)態(tài)成員 使用delete關(guān)鍵字顯式地刪除一個(gè)動(dòng)態(tài)成員,不能使用delete刪除非動(dòng)態(tài)成員。用法如下: delete 對(duì)象名.成員名 一旦成員被刪除,則成員中原有的值便不可訪問(wèn): Talii.phorny=1492; trace(delete Talii.phorny); //true trace(Talii.phorny); //false trace("phorny" in Talii); //false 還可以刪除動(dòng)態(tài)方法 Talii.outerfunc=function(){ trace("add a function out"); } Talii.outerfunc(); trace(delete Talii.outerfunc); //true Talii.outerfunc(); //error
事實(shí)上delete只是減少引用次數(shù)。 刪除一個(gè)非動(dòng)態(tài)成員,請(qǐng)為其直接賦null。如果一個(gè)對(duì)象失去了所有的引用,則該對(duì)象會(huì)被標(biāo)記為“可回收”,并在內(nèi)存管理時(shí)被釋放。 ActionScript 3.0是一種自動(dòng)內(nèi)存管理的語(yǔ)言,其內(nèi)存管理全部由FlashPlayer處理。

動(dòng)態(tài)靜態(tài)成員 運(yùn)行時(shí)在類定義之外,為一個(gè)動(dòng)態(tài)類添加了一個(gè)靜態(tài)成員,則該成員就是一個(gè)“動(dòng)態(tài)靜態(tài)成員”,必須在運(yùn)行時(shí)添加到類名稱上。 這種情況,僅是用于個(gè)別特殊場(chǎng)合。動(dòng)態(tài)靜態(tài)成員在父類外部代碼中是公開(kāi)可見(jiàn)的,但是對(duì)于該屬性對(duì)于外部代碼是公開(kāi)的。 運(yùn)行時(shí)的特殊需要 可以使用delete刪除,有利于減少內(nèi)存占用 歸類管理相關(guān)數(shù)據(jù) 使用較少的全局變量,是一種很好的編程習(xí)慣。 避免被子類繼承 如果想避免子類中的非法調(diào)用,同時(shí)情況特殊不便于使用private關(guān)鍵字,則可以使用“動(dòng)態(tài)靜態(tài)成員”解決


第七章 AS3常用對(duì)象
字典Dictionary其實(shí)就是關(guān)聯(lián)數(shù)組,對(duì)象作為鍵,值可以使任意類型。字典在Flash的開(kāi)發(fā)中比較有用。使用字典的主要用途就是建立對(duì)象之間的映射。 Adobe Flash Player使用垃圾回收系統(tǒng)來(lái)恢復(fù)不再使用的內(nèi)存,依據(jù)是對(duì)象的引用計(jì)數(shù)。
顯示列表是Flash應(yīng)用程序的重要對(duì)象,顯示列表包含F(xiàn)lash應(yīng)用程序中的所有可視化元素,是一個(gè)樹(shù)狀結(jié)構(gòu)。 當(dāng)操作顯示列表時(shí),FlashPlayer自動(dòng)管理顯示對(duì)象的深度,也就是間接管理對(duì)象的z順序。 在Flash中,顯示在舞臺(tái)上的所有元件都是顯示對(duì)象,但是顯示對(duì)象也可以不出現(xiàn)在舞臺(tái)上。 顯示對(duì)象,是指,ActionScript 3.0中顯示類的實(shí)例對(duì)象,顯示類包括核心類DisplayObject的所有子類,以及這些子類的用戶自定義子類。 flash.display包中,包括了大多數(shù)常用的顯示類,還有一些顯示對(duì)象分散收錄于flash.text,flash.media包中。 該樹(shù)非常重要,請(qǐng)務(wù)必牢記。

如果顯示對(duì)象容器被置于屏幕上,那么該顯示對(duì)象容器包含的所有元件都會(huì)顯示在屏幕上面。顯示對(duì)象容器具有批量操作的優(yōu)勢(shì),避免對(duì)一系列對(duì)象重復(fù)的操作。
Flash在處理基元值時(shí),開(kāi)銷(xiāo)比較小,應(yīng)該盡量使用基元值集合中的數(shù)據(jù)類型,以提高Flash的執(zhí)行效率。
null和“”的區(qū)別 值為null的String變量并不占用內(nèi)存資源,而如果一個(gè)值為“”的String,該變量會(huì)被初始化。使用==運(yùn)算符可以檢查出null值和空字符串""的不同。
顯示列表 顯示列表在每個(gè)swf應(yīng)用中只有一個(gè)且必然有一個(gè),舞臺(tái)是顯示列表的根,顯示列表中的顯示對(duì)象如果不出現(xiàn)在舞臺(tái)范圍內(nèi),則該對(duì)象顯然是不可見(jiàn)的。 顯示對(duì)象基本上都可以經(jīng)過(guò)設(shè)置alpha屬性而成為完全透明的。顯示對(duì)象列表中,除了位于最枝節(jié)的對(duì)象外,都是顯示對(duì)象容器。 顯示對(duì)象的主要部分都是由Sprite,MovieClip,Loader構(gòu)成的。

第八章 腳本動(dòng)畫(huà)基礎(chǔ)
第九章 動(dòng)畫(huà)進(jìn)階和腳本仿真
第十章 影片剪輯與圖形圖像
在ActionScript 3中,所有的影片剪輯MovieClip其實(shí)都是類的實(shí)例對(duì)象。對(duì)于影片剪輯,時(shí)間軸其實(shí)是一種基于計(jì)時(shí)器的switch類似的結(jié)構(gòu)。 對(duì)于Flex和FlashDevelop這些沒(méi)有時(shí)間軸編輯窗口的開(kāi)發(fā)工具,直接在代碼中管理Timer是創(chuàng)建動(dòng)畫(huà)的最佳方式。直接使用語(yǔ)言內(nèi)置的時(shí)間軸機(jī)制,就必須使用MovieClip。使用MovieClip有四種方式: 任何以MovieClip類為基類的子類都會(huì)繼承MovieClip中的時(shí)間軸機(jī)制。可以為時(shí)間軸上的任何幀分配幀標(biāo)簽。幀標(biāo)簽是字符串,不是標(biāo)識(shí)符,不需要遵循ActionScript 3.0的標(biāo)識(shí)符規(guī)則。使用幀標(biāo)簽比使用幀編號(hào)具有明顯優(yōu)勢(shì)。
ActionScript 3.0包括FrameLabel類,其每個(gè)實(shí)例均代表一個(gè)幀標(biāo)簽,并有一個(gè)name屬性和一個(gè)frame屬性。幀標(biāo)簽只能在設(shè)計(jì)階段指定和修改。
回調(diào)API是SWF應(yīng)用程序的通用技術(shù)。矢量圖和點(diǎn)陣圖。 點(diǎn)陣圖(位圖)體積過(guò)大,適于描述復(fù)雜的色彩和信息,但是不利于網(wǎng)絡(luò)傳輸,難于創(chuàng)建靈活的動(dòng)畫(huà)。位圖常見(jiàn)的文件格式:bmp,jpg,gif,tga,png,主要區(qū)別在于使用不同類型的壓縮算法。 矢量圖是使用數(shù)學(xué)算法解釋的,因此存儲(chǔ)信息少,在運(yùn)行時(shí)根據(jù)較少的信息還原為屏幕顯示,需要計(jì)算機(jī)具有較高的運(yùn)算能力。矢量圖形是Flash的靈魂,適于制作變形動(dòng)畫(huà),較小的體積也利用網(wǎng)絡(luò)傳播。 矢量圖基于簡(jiǎn)單的算法和基本的形狀,最權(quán)威的工具是Adobe Illustrator。 Flash基于簡(jiǎn)單的矢量繪制能力,ActionScript的繪圖API基于同樣的思想進(jìn)行設(shè)計(jì)。可以用ActionScript的語(yǔ)句定義矢量圖形的繪制過(guò)程,在swf文件運(yùn)行,就是矢量圖形在屏幕上繪制和顯示的過(guò)程。 ActionScript 3.0的繪圖API主要集中在flash.display包中的Graphic類,該類提供了不同的繪圖功能。 在ActionScript進(jìn)行矢量繪圖,總是依賴于某個(gè)對(duì)象實(shí)例,然后調(diào)用該對(duì)象中的Graphics成員進(jìn)行繪制。 在Shape,Sprite或MovieClip類中,都包含Graphics類的實(shí)例作為屬性成員,以供開(kāi)發(fā)者繪圖時(shí)調(diào)用。可以在自定義類中包含一個(gè)Graphics對(duì)象。Graphics類包含用于繪制線條,填充和形狀的屬性和方法。 Shape實(shí)例的性能優(yōu)于其他用于繪制的顯示對(duì)象,因?yàn)樗粫?huì)產(chǎn)生Sprite和MovieClip類附加功能的開(kāi)銷(xiāo)。 Graphics.lineTo(), 起始位置默認(rèn)為舞臺(tái)左上角的(0,0), 連續(xù)調(diào)用可繪制出一序列首尾相連的線段。 手動(dòng)指定線段的開(kāi)始位置,使用moveTo()方法。使用Graphic.lineStyle()方法指定線條樣式。 carv.graphices.lineStyle(14, 0xff3300, 1) 指定該線條為14像素寬,顏色為“0xff3300”,透明度為1 繪制曲線curveTo(),4個(gè)參數(shù),控制點(diǎn)的x,y坐標(biāo),錨點(diǎn)的x,y坐標(biāo),控制點(diǎn)僅影響曲線的走向,并不出現(xiàn)在曲線之上 在繪圖前必須指定填充樣式,在ActionScript 3.0繪圖API中,具有三種類型的填充:單色填充,漸變填充,位圖填充 在ActionScript 3.0內(nèi)部, 位圖是使用bitmap類和BitmapData類管理和操作
Adobe Flash Player支持的位圖圖像格式有jpg,gif,png JPG圖像不包括透明度 PNG可以使用通用的無(wú)損壓縮算法,其體積比BMP小得多。但是PNG的體積一般還是比JPG大,還不能完全取代JPG。PNG的多級(jí)透明度也能使邊緣顯得更加平滑。 無(wú)論是GIF,PNG,JPG都僅僅是位圖的外部格式,在內(nèi)存中,它們都被解碼并轉(zhuǎn)化為最基本的像素矩陣,以Bitmap形式存儲(chǔ)。BitmapData類中復(fù)制了此額外透明度像素字節(jié)。
在ActionScript 3.0中提供了一個(gè)專用的類:Loader類,可以處理外部swf文件和圖像的加載任務(wù)。 Loader.load()加載外部文件,兩個(gè)參數(shù),第一個(gè)參數(shù)是文件地址,必須指定,必須是標(biāo)準(zhǔn)的URLRequest對(duì)象,第二個(gè)參數(shù),可以省略是安全設(shè)置。
URLRequest類是ActionScript 3.0重要類,提供了對(duì)地址和的標(biāo)準(zhǔn)化存儲(chǔ)和操作。精簡(jiǎn)代碼 var Sharploader:Loader = new Loader(); Sharploader.load( new URLRequest("data/f1.jpg")); 為了確保加載完畢,需要添加對(duì)Event.COMPLETE事件的響應(yīng),使用Loader的contentLoaderInfo屬性處理此消息,contentLoaderInfo屬性是LoaderInfo類的實(shí)例,該屬性指向被加載對(duì)象并處理被加載對(duì)象的信息。 下面的代碼演示了Loader類加載外部圖像時(shí),如何進(jìn)行消息偵聽(tīng)。
總是應(yīng)該講BitmapData作為數(shù)據(jù),交給專門(mén)處理位圖顯示的Bitmap類。Bitmap類可視為BitmapData對(duì)象的舞臺(tái)包裝。 利用Bitmap和BitmapData類,可以擺脫對(duì)外部數(shù)據(jù)的依賴,直接在代碼中創(chuàng)建位圖圖像。
文本不等于字符串,是指舞臺(tái)上的顯示對(duì)象。 若要在屏幕上顯示文本,在Adobe Flash player中使用TextField類。TextField類是Flash創(chuàng)作環(huán)境中的提供的文本操作類。該類要解決的問(wèn)題是如何將String字符串類數(shù)據(jù)顯示在屏幕上。 在處理文本顯示時(shí),TextField成為不二之選。在ActionScript 3.0中,文本操作的功能已經(jīng)相當(dāng)成熟了。 在flash.text包中還提供了許多輔助的類,例如TextFormat類和StyleSheet類。如果要設(shè)置復(fù)雜的文本格式,可以使用TextFormat類,TextField對(duì)象能接受TextFormat對(duì)象,并根據(jù)TextFormat對(duì)象提供的信息,改變文本自動(dòng)的顯示格式。快速分析和顯示HTML是Flash的重要功能。
第十一章 事件與交互
事件機(jī)制是ActionScript 3.0的頸骨,代碼的執(zhí)行,一刻也不離不開(kāi)事件。Flash中的每一個(gè)動(dòng)作周?chē)?#xff0c;都有事件的影子。ActionScript提供了多個(gè)類來(lái)處理SWF同運(yùn)行環(huán)境的交互。 事件的處理和操作滲透進(jìn)ActionScript 3.0的方方面面,很難使用一個(gè)基類來(lái)定義。 事件偵聽(tīng)器并不僅檢查和偵聽(tīng)事件,更主要的功能是處理事件。事件響應(yīng)機(jī)制更趨向于標(biāo)準(zhǔn)的DOM結(jié)構(gòu)。 事件的發(fā)送管理是Flash Player的自動(dòng)機(jī)制,所有的機(jī)制由“FlashPlayer事件管理中心”統(tǒng)一管理。 在一個(gè)對(duì)象中可以為多個(gè)事件添加偵聽(tīng)器,也可以為某個(gè)事件添加多個(gè)偵聽(tīng)器。 事件的分發(fā)路徑稱為事件流,不同的事件具有不同的事件流。按照事件流的流向,將事件流分為三個(gè)階段: 1)捕獲階段 2)目標(biāo)階段 3)冒泡階段 并非每個(gè)事件都參與事件流的所有三個(gè)階段
Event類 事件本身也是對(duì)象,利用類來(lái)定義。在ActionScript 3.0中,所有的事件都以Event類為超類,例如MouseEvent和TimerEvent都是子事件類。 Event類的實(shí)例屬性描述了事件對(duì)象的相關(guān)信息,這些屬性都是只讀的。 currentTarget 當(dāng)前對(duì)象, target事件目標(biāo), Flash Player API自身定義了多個(gè)Event子類
IEventDispatcher接口處理有關(guān)事件的方法定義。EventDispatcher類實(shí)現(xiàn)了IEventDispatch接口,顯示列表上的任何對(duì)象都可以使用IEventDispatcher接口的方法。 如果在自定義類中需要操作事件,最簡(jiǎn)單方法是擴(kuò)展EventDispatcher類,這樣就不需要自己編寫(xiě)IEventDispatcher接口的方法 IEventDispatcher接口的事件方法定義中,包括添加事件偵聽(tīng)器的方法,addEventListener(),至少提供兩個(gè)參數(shù),事件類型和事件偵聽(tīng)器名稱。
事件偵聽(tīng)器是一個(gè)函數(shù)或是方法,應(yīng)該包含一個(gè)事件對(duì)象參數(shù),并具有void類型的返回值。 removeEventListener()方法,從對(duì)象中刪除事件偵聽(tīng)器。 dispatchEvent()主動(dòng)將事件對(duì)象派發(fā)到事件流中
查詢系統(tǒng)信息的主要類是flash.system包中的Capabilities類。該類提供了一些屬性,這些屬性描述了播放swf文件的客戶端系統(tǒng)信息。
第十二章 使用外部數(shù)據(jù)
ActionScript 3.0應(yīng)用程序最終能編譯為一個(gè)swf文件。根據(jù)具體情況,可以選擇性的將數(shù)據(jù)置于swf文件之外。swf文件通過(guò)與外部交互數(shù)據(jù),獲得新的信息,指令和資源。從應(yīng)用的角度看,數(shù)據(jù)的不同種類產(chǎn)生了豐富的程序功能。開(kāi)發(fā)者必須掌握如何讀取,分析和操作外部數(shù)據(jù)。 媒體資源數(shù)據(jù)包括聲音,圖像,視頻,其它swf應(yīng)用等類型,資源數(shù)據(jù)未必是磁盤(pán)文件,從攝像頭和麥克風(fēng)獲取的持續(xù)數(shù)據(jù)流,也是一種動(dòng)態(tài)資源數(shù)據(jù)。
Flash可以播放FLV格式的視頻資源,可以存放在本地,也可以部署在遠(yuǎn)程網(wǎng)絡(luò)服務(wù)器。使用FLVPlayback類,幾乎可以完成視頻播放的所有操作,包括漸進(jìn)式下載的Flash視頻文件,也可以播放流式加載的FLV文件。 FLVPlayback將各種功能高度集成和封裝。沒(méi)有提供直接調(diào)用的快進(jìn)和快退方法。使用FLVPlayback之前需要 import fl.video.* Video類和VideoPlayer類需要配合相關(guān)的處理數(shù)據(jù)傳輸?shù)念?#xff0c;才能完成視頻的讀取和播放。
在ActionScript 3.0中,聲音的播放和控制的類主要集中在flash.media包中,其中,最重要的聲音類是Sound類。該類負(fù)責(zé)處理聲音的加載,管理基本聲音屬性,以及啟動(dòng)聲音播放。 播放的每種聲音具有其自己的SoundChannel對(duì)象,它控制聲音左右聲道的音量和播放進(jìn)度。 SoundChannel對(duì)象在調(diào)用Sound類的Play()方法時(shí)被自動(dòng)創(chuàng)建并作為返回值提供 使用SoundTransform類配合SoundChannel對(duì)象控制音量。
URLLoader類加載文本或二進(jìn)制數(shù)據(jù),Loader類可用于加載swf文件或是圖像(JPG, PNG,或GIF)文件 每個(gè)Loader只負(fù)責(zé)加載一個(gè)外部數(shù)據(jù),Loader作為一個(gè)顯示對(duì)象容器,本身支持被加入其它的顯示對(duì)象容器。開(kāi)發(fā)者利用addChild()方法將Loader對(duì)象裝入舞臺(tái)顯示列表。
加載圖像有不同的選擇,可以在TextField中利用HTML標(biāo)記裝載圖像,也可以利用位圖顯示對(duì)象實(shí)現(xiàn)舞臺(tái)的顯示。 為了避免內(nèi)存泄露,應(yīng)盡量避免直接使用打開(kāi)的圖像文件,而是將打開(kāi)的文件寫(xiě)入新的位圖副本,并關(guān)閉Loader對(duì)象,釋放位圖緩存。
通過(guò)外部文本和XML文件,能為SWF問(wèn)題提供變量和內(nèi)容,存放程序的配置信息, 使用URLLoader時(shí),需要等到整個(gè)文件下載完成之后,才能訪問(wèn)URLLoader數(shù)據(jù)。有關(guān)下載進(jìn)度的通知事件,通過(guò)bytesLoaded和bytesTotal屬性,以及已調(diào)度的事件,可以監(jiān)視文本的下載進(jìn)度。 URLVariables類是一個(gè)輔助類,定義了處理URL字符串的常見(jiàn)方法。URL字符串由變量名和變量值組成,使用&相連。URLVariables對(duì)象可以使用.運(yùn)算符連接任何名稱。屬性未定義時(shí),按未定義處理。 URLLoader加載外部文本需要利用許多字符串的處理技巧。 var myid:URLLoader=new URLLoader(); myid.dataFormat=URLLoaderDataFormat.VARIABLES;
更清晰地定義外部數(shù)據(jù),需要利用XML文件。在ActionScript 3.0中創(chuàng)建XML對(duì)象非常簡(jiǎn)單,可以使用XML類的構(gòu)造函數(shù),直接將一個(gè)XML格式的字符串轉(zhuǎn)化為XML對(duì)象。XML的操作非常簡(jiǎn)單。 XMLList實(shí)例可以包含完整的XML文檔,XML片段或是XML查詢結(jié)果。 精簡(jiǎn)的代碼片段 var x:XML; (new URLLoader(new URLRequest("xsample.xml"))).addEventListner("complete", xl); function xl(et:Event):void{ x = XML(et.target.data); }
URLStream類提供了對(duì)下載的低級(jí)訪問(wèn),下載文件內(nèi)容作為原始二進(jìn)制數(shù)據(jù)提供。可以提前關(guān)閉URLStream流的下載。
Flash Player對(duì)磁盤(pán)讀寫(xiě)受到很多限制,為了保存信息,需要借助于共享對(duì)象和FileReference類。使用ShareObject類管理數(shù)據(jù)共享對(duì)象,也可以將共享數(shù)據(jù)對(duì)象存放到服務(wù)器端,編譯在多個(gè)操作系統(tǒng)和不同計(jì)算機(jī)之間共享數(shù)據(jù)。 ShareObject對(duì)象有Flash Player自動(dòng)創(chuàng)建,該類提供一個(gè)getLocal()和getRemote()方法,分別訪問(wèn)本地和遠(yuǎn)程的數(shù)據(jù)共享對(duì)象。 盡量將數(shù)據(jù)共享對(duì)象作為優(yōu)化程序用戶體驗(yàn)的方法,而不是左右程序功能和行為的關(guān)鍵技術(shù)。 本地存儲(chǔ)和遠(yuǎn)程存儲(chǔ)各有利弊: 本地存儲(chǔ)不利于機(jī)器之間的數(shù)據(jù)共享,不能保證操作系統(tǒng)之間的數(shù)據(jù)共享,用戶數(shù)據(jù)缺乏統(tǒng)一的官網(wǎng)和備份; 遠(yuǎn)程存儲(chǔ)必須保證網(wǎng)絡(luò)連接暢通,網(wǎng)絡(luò)傳輸?shù)牟环€(wěn)定不利于程序的平穩(wěn)運(yùn)行。 ActionScript 3.0提供了雙重存儲(chǔ)機(jī)制,可同時(shí)本地和遠(yuǎn)程永久存儲(chǔ),建立遠(yuǎn)程和客戶端的雙向副本。
網(wǎng)絡(luò)通信 網(wǎng)絡(luò)通信有很多類負(fù)責(zé): FileReference類,Socket類,XMLSocket類,NetConnection類,NetStream類 套接字連接分為兩大類:二進(jìn)制數(shù)據(jù)的套接字連接,XML數(shù)據(jù)的套接字連接,前者是Socket類,格式化文本傳輸,使用XMLSocket類
Socket套接字類 使用Socket類與服務(wù)器的二進(jìn)制協(xié)議通信非常容易。連接成功后發(fā)送Event.CONNECT事件。當(dāng)服務(wù)器關(guān)閉連接時(shí),Flash player會(huì)接收到Event.CLOSE事件通知。 使用flush()方法,對(duì)套接字輸出緩沖區(qū)中積累的所有數(shù)據(jù)進(jìn)行刷新。 XMLSocket是一個(gè)低層次的通信對(duì)象,能夠提供較低級(jí)別的讀寫(xiě)控制。XMLSocket類存在的意義在于它實(shí)現(xiàn)了XML信息的套接字操作,XML消息通過(guò)全雙工TCP/IP 流套接字連接發(fā)送。應(yīng)用場(chǎng)景比如,多用戶聊天室程序。在XML對(duì)象和文檔的層面發(fā)送和接收消息。
FileReference類提供了在用戶計(jì)算機(jī)和服務(wù)器之間上傳和下載文件的方法。upload方法上傳該文件,播放器正式支持的上傳或下載文件大小是100MB。 FileReferenceList類選擇了一個(gè)或是多個(gè)要上載文件的方法。 出于安全性考慮,Flash Player對(duì)于磁盤(pán)的操作非常有限。
許多遠(yuǎn)程通信的操作都需要服務(wù)器端的支持,開(kāi)發(fā)者需要了解常見(jiàn)的協(xié)議,并熟悉網(wǎng)絡(luò)環(huán)境下的異步操作。ActionScript 3.0提供 了強(qiáng)大的低端類和容易使用的高端類,以滿足不同場(chǎng)合和不同開(kāi)發(fā)需求的要求。
第十五章 全屏幕FLV視頻播放器
為了在客戶端Flash應(yīng)用程序中創(chuàng)建視頻回放,需要使用多個(gè)底層類 Video類 flash播放視頻的基本類,舞臺(tái)上的實(shí)際視頻內(nèi)容框是video類的一個(gè)實(shí)例。Video類是低端的視頻處理類,不包括界面控制和網(wǎng)絡(luò)連接控制功能。開(kāi)發(fā)者需要使用NetConnection類和NetStream類, 完成網(wǎng)絡(luò)連接和視頻數(shù)據(jù)加載的相關(guān)操作。若有播放視頻流,需要使用NetStream類的attachNetStream()方法,將視頻數(shù)據(jù)附加到Video對(duì)象上,Video對(duì)象將回放該NetStream流中的視頻數(shù)據(jù)。 Video類為開(kāi)發(fā)者提供了底層的控制能力,適合開(kāi)發(fā)具有嚴(yán)格文件體積現(xiàn)在和特殊自定義功能的視頻播放器。
NetConnection類 該對(duì)象是到視頻文件的連接,可以將其視為視頻數(shù)據(jù)饋送的通道。定義連接的相關(guān)選項(xiàng),并不會(huì)打開(kāi)具體的視頻文件。該類主要實(shí)現(xiàn)與視頻服務(wù)器的協(xié)作。除了FMS,還可以連接標(biāo)準(zhǔn)的HTTP服務(wù)器,借助HTTP協(xié)議漸進(jìn)式 下載視頻文件。

NetStream類 在加載視頻文件時(shí),ActionScript 3.0使用NetStream對(duì)象實(shí)例來(lái)控制視頻源。NetConnection對(duì)象通常和NetStream對(duì)象一起使用,因?yàn)閯?chuàng)建一個(gè)NetStream對(duì)象需要NetConnection對(duì)象作為參數(shù)。 NetStream類通過(guò)NetConnection對(duì)象提供的連接,打開(kāi)FlashPlayer與服務(wù)器或本地文件系統(tǒng)之間的單向流連接。
連接創(chuàng)立后,需要使用NetStream對(duì)象打開(kāi)具體的數(shù)據(jù)流,傳輸某個(gè)視頻文件中的數(shù)據(jù)。類似NetConnection對(duì)象中的一個(gè)通道。該通道可以使用NetStream.publish()發(fā)布音視頻數(shù)據(jù),也可以使用 NetStream.play()加載接收數(shù)據(jù)。
根據(jù)FLV文件的存儲(chǔ)方式,指定視頻部署方式 1)本地計(jì)算機(jī)上, 2)從標(biāo)準(zhǔn)web服務(wù)器上漸進(jìn)式下載 3)從FMS流式加載
根據(jù)FlashPlayer安全機(jī)制,Flash Player可以播放與swf文件存儲(chǔ)于同一個(gè)目錄中或存儲(chǔ)于其子目錄中的本地FLV文件,或是播放具有絕對(duì)地址的遠(yuǎn)程FLV視頻文件,但是不能訪問(wèn)swf文件所在的目錄的上級(jí)目錄。 在自定義類中使用Video類,需要使用該類的導(dǎo)入聲明 import flash.media.video;
不需要視頻服務(wù)器,播放本地文件,使用 connection.connect(null); NetStream對(duì)象和NetConnection對(duì)象發(fā)出的事件不同,但是可共用一個(gè)事件偵聽(tīng)回調(diào)函數(shù),在switch時(shí)判斷發(fā)生的事件就可以了。
利用包命名空間限制不同控制類的訪問(wèn),這種換膚機(jī)制在文件管理和編譯時(shí)都非常方便。? Video類自身不提供視頻的控制方法,控制視頻的暫停,繼續(xù),應(yīng)該利用NetStream類提供的pause()方法和resume()方法 類文件只是一個(gè)文本文件,不能在其中包含任何資源,而FLA文件是一個(gè)復(fù)合文件,包含許多資源內(nèi)容。一旦FLA文件中導(dǎo)入了組件資源,就可以在自定義類中使用這些組件。
NetStream.time記錄當(dāng)前播放位置 NetStream.seek()跳轉(zhuǎn)到視頻流中的指定位置 NetStream.close()關(guān)閉視頻流,不可恢復(fù)播放,還會(huì)刪除已通過(guò)HTTP下載的FLV文件的本地副本
onMetaData() 將視頻元數(shù)據(jù)作為對(duì)象參數(shù)傳入,被內(nèi)部處理,Flash Player自動(dòng)響應(yīng)該事件,這種內(nèi)部機(jī)制一般稱為系統(tǒng)回調(diào)。 為了操作視頻元數(shù)據(jù),開(kāi)發(fā)者只能創(chuàng)建一個(gè)自定義回調(diào)函數(shù),并讓Flash Player使用自定義的回調(diào)函數(shù),為了綁定NetStream,需要利用NetStream.client屬性來(lái)確定視頻流的回調(diào)對(duì)象。 函數(shù)表達(dá)式可以在函數(shù)內(nèi)部定義,這是非常方便的語(yǔ)法特性。
追蹤播放進(jìn)度需要三個(gè)量: 起始時(shí)間,終止時(shí)間,以及當(dāng)前時(shí)間 隨著視頻的播放,滑塊的進(jìn)度會(huì)相應(yīng)地改變。 NetStream類中提供了bufferTime屬性控制緩沖區(qū)大小,默認(rèn)0.1秒,為了流暢播放,可以設(shè)置更大些。當(dāng)前緩沖區(qū)中的數(shù)據(jù)量為bufferLength,也以秒數(shù)為單位。通過(guò)這兩個(gè)量,可以確定當(dāng)前緩沖區(qū)的加載情況。 NetStream.bytesLoaded屬性,獲取當(dāng)前加載的數(shù)據(jù)量,bytesTotal屬性,表示當(dāng)前加載文件的總字節(jié)大小。這兩個(gè)量計(jì)算出當(dāng)前加載量的百分比。
取得播放時(shí)長(zhǎng)是個(gè)很耗時(shí)的工作,目前普遍的做法是在壓縮的過(guò)程中,將總時(shí)長(zhǎng)直接寫(xiě)入FLV的元數(shù)據(jù)。開(kāi)發(fā)人員不能過(guò)分依賴該量,因?yàn)槭穷A(yù)先寫(xiě)入的。bytesTotal屬性是FLV文件的大小,具有穩(wěn)定性,可以動(dòng)態(tài)判斷。 全屏模式還是要受Flash Player版本的限制,如果使用ActionScript 3.0,Flash Player版本必須高于9.0才能正常播放。全屏模式下的運(yùn)行技術(shù)已經(jīng)非常成熟。不同的FlashPlayer版本對(duì)視頻的回放有著巨大的影響。 保證客戶端Flash Player播放器能夠使用硬件加速非常重要。視頻回放的解碼工作可以在多個(gè)線程中進(jìn)行,并且真正支持多個(gè)CPU內(nèi)核。
當(dāng)swf嵌入網(wǎng)頁(yè)是,必須設(shè)置allowFullScreen屬性為true時(shí),才能起到Flash Player的全屏模式支持。 flash.display.StageDisplayState類只包括兩個(gè)常量,必須在用戶的交互事件中設(shè)置。 進(jìn)入全屏模式,Flash Player會(huì)出現(xiàn)自動(dòng)安全警告,告訴用戶使用ESC鍵可以退出全屏。 全屏模式下,鍵盤(pán)無(wú)法控制,只有鼠標(biāo)。標(biāo)準(zhǔn)模式向全屏模式的變化是一種線性映射,使用Stage.scaleMode屬性控制這種投影機(jī)制。




總結(jié)

以上是生活随笔為你收集整理的《ActionScript 3.0权威指南》阅读笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。