AS3已經出了很久了,相信大家都知道這個事實,但經由Google搜尋的結果呈現,這是AS3使用者最常發現的疑問
這個getURL問題在Google搜尋AS3時排行第一,其搜尋量可見一斑,確實為大多數剛接觸AS3的使用者會碰到的前幾個問題
以前我們在ActionScript 2.0的時候,想要讓my_btn被點選的時候在新視窗開啟神魂顛倒的首頁,只要用這樣的語法就可以了:
以下為《AS》原始碼
開新視窗複製到剪貼簿列印出來?
my_btn.onRelease=function(){
getURL("http://bbs.flash2u.com.tw/","_blank");
}
my_btn.onRelease=function(){ getURL("http://bbs.flash2u.com.tw/","_blank"); }
但在ActionScript 3.0裡已經不再使用「getURL();」指令,而改用「URLRequest」配合「navigateToURL();」來達成這個效果:
以下為《AS》原始碼
開新視窗複製到剪貼簿列印出來?
my_btn.addEventListener(MouseEvent.CLICK, openNewPage);
function openNewPage(event:MouseEvent):void{
var targetURL:URLRequest = new URLRequest("http://bbs.flash2u.com.tw/");
navigateToURL(targetURL, "_blank");
}
my_btn.addEventListener(MouseEvent.CLICK, openNewPage); function openNewPage(event:MouseEvent):void{ var targetURL:URLRequest = new URLRequest("http://bbs.flash2u.com.tw/"); navigateToURL(targetURL, "_blank"); }
如果覺得沒有 getURL 感覺怪怪的,也可以參考 http://www.stevensacks.net/2008/02/06/as3-geturl-solved/
這個作者貼心的將getURL寫成了一個class,import 進來後輸入Web.getURL(); 就可使用
參考資訊
套件 flash.net 類別 public final class URLRequest 繼承 URLRequest Object
語言版本 : ActionScript 3.0 Player 版本 : Flash Player 9
URLRequest 類別會在單一 HTTP 要求中捕捉所有資訊。
URLRequest 物件會傳遞給 URLStream、URLLoader、Loader 和其它載入作業的 load() 方法 (以便起始 URL 下載) 以及 FileReference 類別的 upload() 和 download() 方法。 使用此類別時,必須顧及 Adobe R Flash R Player 安全性模型:
如果呼叫端 SWF 檔位於本機系統檔案安全執行程序中且目標資源來自網路安全執行程序,則不允許下載資料。 如果呼叫端 SWF 檔來自網路安全執行程序且目標資源為本機,也不會允許下載資料。 屬性定義自 constructor : Object 類別物件的參照或是特定物件實體的建構函數。
Object contentType :
String 任何 POST 資料的 MIME 內容類型。
URLRequest data : Object 物件,其中包含要使用 URL 要求傳輸的資料。
URLRequest method :
String 控制 HTTP 表單送出方法為 GET 或 POST 作業。
URLRequest prototype : Object [static] 類別或函數物件之原型物件的參照。
Object requestHeaders : Array 要附加至 HTTP 要求之該 HTTP 要求檔頭的陣列。 URLRequest url : String 要求的 URL。
URLRequest方法定義自 URLRequest(url:String = null) 會建立 URLRequest 物件。 URLRequest
其他 AS 2.0 轉 AS 3.0 參考
一.addChild,添加一個孩子
首先,在場景舞台上新建一個mc,或者從元件庫裡拖到場景舞台上一個mc,然後修改mc的實體名稱,在動作面板中對這個mc寫一些相關的程式碼。比如mc.屬性=…;mc.方法=…這些是沒有變的;下面我來說一下,從元件庫裡調用mc的變化。
在as2.0中,我們給mc起一個鏈接名,然後用attachMovie來調用這個mc。
代碼:
attachMovie(「鏈接名」,」新名字」);
這樣我們就在舞台上就有了一個叫新名字的mc。
在as3.0中的寫法有所改變,它把庫中的mc看成了一個類,要在舞台上載入這個mc,首先要聲明這個類,然後再把它new出來,然後在add到舞台上,寫法是這樣的。
代碼:
var 新名字 = new 鏈接名();
addChild(新名字);
添加上了,我們應怎麼刪除呢?添加是addChild,那麼刪除,就應該是removeChild的咯,沒錯,我們用mc.parent.removeChild來刪除,比如如果mc的parent是stage,那麼刪除mc應該是
代碼:
stage.removeChild(mc);
二。ENTER_FRAME,讓mc動起來
在as2.0中,要讓一個mc連續的移動,我們用onEnterFrame
代碼:
onEnterFrame=function(){
新名字._x++;
}
在as3.0中,要實現同樣的效果,彷彿麻煩了一些,另外,需要說明的是,在as3.0中的屬性,都沒有了「_「,也就是做,mc的_x屬性應該寫成:mc.x。
as3.0中,要先給stage建立一個事件偵聽,監聽到ENTER_FRAME事件後,去調用moving函數(這是我自定義的),寫法如下:
代碼:
import flash.events. Event;
stage.addEventListener(Event.ENTER_FRAME,moving);
//或者寫成
// stage.addEventListener(「enterFrame」,moving);
function moving(e:Event) {
新名字.x++;
}
三。MouseEvent,看看鼠標在幹嘛
在as2.0中,檢測一個mc上的鼠標事件,可以這麼寫
代碼:
mc.onRelease=function(){
trace(「mc is release!」);
}
其他的像onPress,onRollOver…類似。
在as3.0中,沒有了onRelease等事件,還是要通過事件偵聽來實現,這是as3.0一個新的機制。思路跟添加ENTER_FRAME的差不多,寫法如下:
代碼:
import flash.events.MouseEvent;
mc.addEventListener(MouseEvent.MOUSE_DOWN,down);
//或者寫成mc.addEventListener(「mouseDown」,down);
function down(e:MouseEvent){
trace(「mouse is down」);
}
四.KeyboardEvent,用鍵盤讓mc懂起來
在as2.0中,先新建一個listener,用這個listener來監聽鍵盤的動作,然後把這個listener添加到key上,寫法如下:
代碼:
var keyListener:Object;
keyListener.onKeyDown=function(){
if(Key.getCode==Key.LEFT){
trace(「left key is press!」);
}
}
key.addListener(keyListener);
在as3.0中的寫法很類似,只是少了新建keyListener那一句
代碼:
import flash.ui.Keyboard;
stage.addEventListener(KeyboardEvent.KEY_DOWN,isDown);
function isDown(e:KeyboardEvent){
if(e.keyCode==Keyboard.UP){
trace("left key is press!");
}
}
網路的事情,讓網路解決
[ 逛網路就像是在探險 ]
神 魂 顛 倒 T W G
http://bbs.flash2u.com.tw
http://tw.myblog.yahoo.com/flash2u-twg
http://flash-silverlight.blogspot.com/
http://flash2u.spaces.live.com/?_c02_owner=1
本文章來自於神魂顛倒論壇 http://bbs.flash2u.com.tw
原文網址:http://bbs.flash2u.com.tw/dispbbs_36_90657_1_next.html