日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

[转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

發(fā)布時(shí)間:2025/3/20 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文轉(zhuǎn)自:http://www.cnblogs.com/artwl/p/3396330.html

近期項(xiàng)目中可能要用到Flash存取數(shù)據(jù),并與JS互調(diào),所以就看了一下ActionScript 3.0,現(xiàn)把學(xué)習(xí)結(jié)果分享一下,希望對(duì)新手有幫助。

目錄

  ActionScript 3.0簡介

  Hello World

  文件讀寫

  數(shù)據(jù)存儲(chǔ)(SharedObject)

  與JS互調(diào)

ActionScript 3.0簡介

  ActionScript 3.0 是一種強(qiáng)大的面向?qū)ο缶幊陶Z言,ActionScript 3 符合 ECMAScript Language Specification 第三版。它還包含基于 ECMAScript Edition 4 的功能,比如類、包和名稱空間;可選的靜態(tài)類型;生成器和迭代器;以及非結(jié)構(gòu)化賦值(destructuring assignments)。隨著 Web應(yīng)用程序項(xiàng)目需求的增長,也要求 ActionScript 引擎有重大的突破。ActionScript 3 引入了一個(gè)新的高度優(yōu)化的 ActionScript Virtual Machine(AVM2),與 AVM1 相比,AVM2 的性能有了顯著的提高。這使 ActionScript 3 代碼的執(zhí)行速度幾乎比以前的 ActionScript 代碼快了 10 倍。(本段內(nèi)容來自百度百科)

  ActionScript 3.0 核心語言有很多新特性:

  1、運(yùn)行時(shí)異常處理機(jī)制

  2、運(yùn)行時(shí)類型

  3、密封類

  4、閉包方法

  5、使用E4X理論處理XML數(shù)據(jù)

  6、正則表達(dá)式

  7、命名空間

  8、新基元數(shù)據(jù)類型

Hello World

  這里用一個(gè)簡單的例子演示如何開發(fā)ActionScript 3.0 程序(IDE為Flash CS6),內(nèi)容包括添加組件,注冊(cè)事件,跟蹤輸出。

  1、打開Flash CS6,新建一個(gè)ActionScript 3.0 文檔,保存為HelloWorld.fla

  注:此處還可以選擇“文件”菜單,點(diǎn)擊“新建”命令進(jìn)行新建。

  2、在新建的文檔上添加按鈕組件

  把組件命名為btnHelloWorld,并設(shè)置label值為“Hello World”,如下圖所示:

  3、添加文檔類(即ActionScript 3.0 代碼文件)

  輸入類名稱“HelloWorld”(可自定義),然后保存(Ctrl + S)或點(diǎn)擊輸入框后面的“編輯類定義”按鈕,會(huì)彈出圖中的提示框,點(diǎn)確定即可。然后再次點(diǎn)擊輸入框后面的“編輯類定義”按鈕,IDE會(huì)自動(dòng)創(chuàng)建一個(gè)HelloWorld類,并打開AS代碼編輯界面:

  把文檔保存為HelloWorld.as,與HelloWorld.fla在同一目錄下。

  4、給按鈕組件注冊(cè)點(diǎn)擊事件。

  注冊(cè)事件要引入?flash.events.MouseEvent 包,注冊(cè)事件要用 addEventListener(事件類型, 事件處理方法),這個(gè)跟JS中的基本一致。

  這里要注意的是,如何取到文檔中添加的那個(gè)bthHelloWorld按鈕呢?不同于JS中我們用ID或TagName或Name去查找,在AS中界面上定義的組件可以直接用實(shí)例名稱。

  代碼如下:

  5、添加跟蹤代碼:在點(diǎn)擊按鈕時(shí),輸出Hello World!

  AS中的跟蹤代碼用trace(string),類型于JS中的console.log(),代碼如下:

  6、運(yùn)行,查看效果

  按 Ctrl + Enter 快捷鍵運(yùn)行,然后點(diǎn)擊界面上的按鈕,觀察輸出面板中的輸出:

  至此,HelloWorld DEMO已經(jīng)完成。怎么樣,有JS基礎(chǔ)的同學(xué)是不是覺得很容易上手?

  不過目前介紹的只是Flash ActionScript 3.0中的冰山一角。

文件讀寫

  AS 3.0 中的文件讀要用到 flash.net.URLLoader 和 flash.net.URLRequest 和 flash.net.URLLoaderDataFormat?包,文件寫要用到?flash.net.FileReference 包。另外,對(duì)于文件的寫更像是文件下載,會(huì)彈出一個(gè)選擇路徑的窗口。在AIR中可以用其他方式實(shí)現(xiàn)不彈窗的文件寫。

  1、文件讀取

  文件數(shù)據(jù)的讀取是用?URLLoader 加載一個(gè)?URLRequest 。

  URLLoader可用來加載文本文件、二進(jìn)制數(shù)據(jù)或外部變量的值。使用方法如下:

var dataLoad:URLLoader = new URLLoader();//文件路徑 var dataFilePath: String = "demo.txt"; //構(gòu)造URLRequest var dataRequest: URLRequest = new URLRequest(dataFilePath); //設(shè)置數(shù)據(jù)格式 dataLoad.dataFormat = URLLoaderDataFormat.TEXT; //注冊(cè)加載完成事件 dataLoad.addEventListener(Event.COMPLETE, loadDataComplete); //開始加載 dataLoad.load(dataRequest); //數(shù)據(jù)讀取完成后進(jìn)行處理 private function loadDataComplete(e: Event):void{ var fileData:String = dataLoad.data; }

  2、文件寫入

  寫文件直接用FileReference的save即可,代碼如下:

var f:FileReference = new FileReference; f.save(內(nèi)容, 文件名);

  我寫了一個(gè)DEMO,界面如下,界面繪制方式跟上面界紹的一樣。

  AS代碼如下:

package {import flash.display.MovieClip;import flash.events.MouseEvent; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLLoaderDataFormat; import flash.net.FileReference; import flash.text.TextFormat; public class ReadWriteDemo extends MovieClip { private var dataLoad:URLLoader = new URLLoader(); private var dataFilePath: String = "demo.txt"; private var dataRequest: URLRequest = new URLRequest(dataFilePath); public function ReadWriteDemo() { btnFuncInit(); // constructor code } private function btnFuncInit():void { var titleTF:TextFormat = new TextFormat(); titleTF.size = 30; lblTitle.setStyle("textFormat", titleTF); var btnTF: TextFormat = new TextFormat(); btnTF.size = 20; btnLoad.setStyle("textFormat", btnTF); btnSave.setStyle("textFormat", btnTF); btnClear.setStyle("textFormat", btnTF); txtContent.setStyle("textFormat", btnTF); btnLoad.addEventListener(MouseEvent.CLICK, loadData); btnSave.addEventListener(MouseEvent.CLICK, saveData); btnClear.addEventListener(MouseEvent.CLICK, clearData); } private function loadData(evt:MouseEvent):void{ dataLoad.dataFormat = URLLoaderDataFormat.TEXT; dataLoad.addEventListener(Event.COMPLETE, loadDataComplete); dataLoad.load(dataRequest); } private function loadDataComplete(e: Event):void{ txtContent.text = dataLoad.data; } private function saveData(evt:MouseEvent):void { var val: String = txtContent.text; var f:FileReference = new FileReference; f.save( val, "demo.txt"); } private function clearData(evt:MouseEvent):void { txtContent.text = ""; } } } View Code

  代碼中有部分是控制格式的,可以不看。

數(shù)據(jù)存儲(chǔ)(SharedObject)

  如果不依賴服輸務(wù)端,AS中的數(shù)據(jù)存儲(chǔ)一般用的是SharedObject(譯為本地共享對(duì)象),SharedObject跟瀏覽器中的cookie類似,不同的有兩點(diǎn):

  1、SharedObject默認(rèn)沒有過期時(shí)間,cookie默認(rèn)隨瀏覽器關(guān)掉就失效

  2、SharedObject存儲(chǔ)數(shù)據(jù)默認(rèn)限制為100k,cookie要小一些,大多數(shù)瀏覽器支持最大為 4096 字節(jié)的 Cookie。

  SharedObject的使用比較簡單,示例代碼如下:

//創(chuàng)建一個(gè)名為test的本地共享對(duì)象; var so = SharedObject.getLocal("test"); //給共享對(duì)象添加一個(gè)username的屬性并存儲(chǔ)數(shù)據(jù) so.data.username="artwl"; //添加該屬性不會(huì)將它保存到硬盤。只有影片被卸載或使用語句so.flush()強(qiáng)制保存信息。 so.flush(); //現(xiàn)在可以用trace語句獲取一下username的值; trace(so.data.username);

  DEMO界面如下:

  AS代碼如下:

package {import flash.display.MovieClip;import flash.events.MouseEvent; import flash.net.SharedObject; import flash.text.TextFormat; public class ShareObjectDemo extends MovieClip { public function ShareObjectDemo() { btnFuncInit(); // constructor code } private function btnFuncInit():void { var titleTF:TextFormat = new TextFormat(); titleTF.size = 30; lblTitle.setStyle("textFormat", titleTF); var btnTF: TextFormat = new TextFormat(); btnTF.size = 20; btnLoad.setStyle("textFormat", btnTF); btnSave.setStyle("textFormat", btnTF); btnClear.setStyle("textFormat", btnTF); txtContent.setStyle("textFormat", btnTF); btnLoad.addEventListener(MouseEvent.CLICK, loadData); btnSave.addEventListener(MouseEvent.CLICK, saveData); btnClear.addEventListener(MouseEvent.CLICK, clearData); } private function loadData(evt:MouseEvent):void{ var mySo = SharedObject.getLocal("setting"); var setting = mySo.data.setting; if (setting != undefined && setting.length) { txtContent.text = setting; } else { txtContent.text = "暫無數(shù)據(jù)"; } } private function saveData(evt:MouseEvent):void { var val: String = txtContent.text; var mySo = SharedObject.getLocal("setting"); mySo.data.setting = val; mySo.flush(); } private function clearData(evt:MouseEvent):void { txtContent.text = ""; } } } View Code

與JS互調(diào)

  ActionScript 與 JS 互調(diào)可能是很多前端開發(fā)者比較感興趣的地方。

  需要引入import flash.external.ExternalInterface;

  1、ActionScript調(diào)用JavaScript的方法

  這里要用到ExternalInterface類的call方法:

  ExternalInterface.call(functionName:String,...arguments):   fuctionName:要調(diào)用的JavaScript函數(shù)名   arguments:參數(shù),可選

  1)不帶參數(shù)的情況:

//JavaScript: function Show() {alert("I am a js function"); } //ActionScript直接用一條語句調(diào)用 ExternalInterface.call("Show");

  2)帶參數(shù)的情況:

//JavaScript: function Show(message) {alert(message); }//ActionScript: ExternalInterface.call("Show","I am a message from AS");

  2、JavaScript調(diào)用ActionScript的方法

ExternalInterface.addCallback( functionName:String, closure:Function):void  functionName:要注冊(cè)的函數(shù)名 closure:對(duì)應(yīng)的執(zhí)行函數(shù)

  示例:

//ActionScript:ExternalInterface.addCallback("Show",OnShow);private function OnShow(message:String):string{return message; }   //JavaScript: function CallAS() { //swfobj是頁面引入的swf對(duì)象 swfobj.Show("i am a message from js"); }

  這里有幾點(diǎn)需要注意(都是這兩天踩過的坑):

  1、頁面上引入的swf中allowScriptAccess?參數(shù)的值要改為 always ,否則AS調(diào)JS會(huì)不起作用(權(quán)限問題):

<param name="allowScriptAccess" value="always" />

  2、如果直接用Flash CS6的“文件”->“發(fā)布預(yù)覽”->“HTML”命令生成HTML頁面,引入的object會(huì)有兩層,默認(rèn)只有外層的object標(biāo)簽上有id屬性,我們要自己在內(nèi)層object也加上id屬性(值可以自己寫),這樣做的目地是,我們不知道瀏覽器最終渲染時(shí)用的是哪個(gè)object,所以要自己判斷,HTML代碼如下:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="440" height="290" id="FlashJSDemo" align="middle"> <param name="movie" value="FlashJSDemo.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <param name="play" value="true" /> <param name="loop" value="true" /> <param name="wmode" value="window" /> <param name="scale" value="showall" /> <param name="menu" value="true" /> <param name="devicefont" value="false" /> <param name="salign" value="" /> <param name="allowScriptAccess" value="always" /> <!--[if !IE]>--> <object type="application/x-shockwave-flash" data="FlashJSDemo.swf" id="FlashJSDemo1" width="440" height="290"> <param name="movie" value="FlashJSDemo.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <param name="play" value="true" /> <param name="loop" value="true" /> <param name="wmode" value="window" /> <param name="scale" value="showall" /> <param name="menu" value="true" /> <param name="devicefont" value="false" /> <param name="salign" value="" /> <param name="allowScriptAccess" value="always" /> <!--<![endif]--> <a href="http://www.adobe.com/go/getflash"> <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="獲得 Adobe Flash Player" /> </a> <!--[if !IE]>--> </object> <!--<![endif]--> </object>

  這里內(nèi)部object的屬性 id="FlashJSDemo1"就是我自己加上去的。

  在JS中要這樣判斷:

var FlashJSDemo1 = document.getElementById('FlashJSDemo'); var FlashJSDemo2 = document.getElementById('FlashJSDemo1');//這一句就是判斷用的是哪個(gè)object var FlashJSDemo = FlashJSDemo1.setName != undefined ? FlashJSDemo1 : FlashJSDemo2; FlashJSDemo.setName(name);

  注:這里的setName是我在AS中定義的,供JS調(diào)用的。

  在我機(jī)子上,用chrome瀏覽器的測試結(jié)果是最終setName綁到了內(nèi)層object上。

?

  本文DEMO可以點(diǎn)擊這里查看

作者:Artwl

出處:http://artwl.cnblogs.com

本文首發(fā)博客園,版權(quán)歸作者跟博客園共有。轉(zhuǎn)載必須保留本段聲明,并在頁面顯著位置給出本文鏈接,否則保留追究法律責(zé)任的權(quán)利。

?

總結(jié)

以上是生活随笔為你收集整理的[转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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