as3總結(5)

來源:互聯網
上載者:User

    今天在看AS3遊戲編程,看到一些東西,挺好的,上來總結一下

1、當 int 或者 uint 變數類型可用時,就不要用 Number 類型,這樣處理速度會更快一些。如果
你在數組中定義成百上千個 Number 類型的數值,就會發現影片啟動並執行相當慢。還有,比這
更糟糕的就是使用未定義變數,他們在運行時佔用很大的記憶體開銷。另還需要注意,在建立
影片剪輯時,能用 sprite 的就不要用 movieclip。

2、完成你的 flash 製作後正確的處理對象,絕對是一個好習慣。例如,你在製作射擊遊戲時,在一分鐘內會有成百上千的子彈射出來,當他們離開螢幕後,還是保留在記憶體中的。為了移
除這些對象,你需要在變數或數組中刪除所有的對象,並用removeChild方法移出顯示列表。

3、類擴充類型是否正確
如下面代碼所示:
public class myClass extends Sprite{
這裡的擴充類型是選擇 sprite 還是 movieClip,主要看這個影片主時間軸有幾幀。如果是單
幀的話,就使用 sprite,多幀就使用 movieclip。

4、注意區分大小寫
當你在給變數,函數等命名時,一定要注意區分大小寫。比如,myVariable 和 myvariable 就
是兩個完全不同的變數;同樣,你如果命名了一個 myClass 類,那麼,在調試影片時,軟體
將會自動調用名稱為 myClass 的建構函式,此時,如果你不小心把該函數名寫成了 myclass,
那麼在初始化時它就不會被調用。

5、是否需要禁用快速鍵
當你在測試影片時用到鍵盤輸入的話,有時候你會發現部分按鍵不響應。這是因為當前的測
試環境需要使用這些快速鍵。換句話說,如果你想讓發布到網頁上的影片需要自訂快速鍵
的話,選擇菜單“控制”->“禁用快速鍵”選項即可。

6、在發布設定的 flash 標籤中,有一個本地訪問安全性設定,可以選擇通過本地檔案訪問還
通過網路訪問。為確保 flash 影片的安全可靠,你需要根據實際情況選擇其中的一項。

7、影片剪輯的應用
如果你在庫中有一個影片剪輯,想把它添加到舞台上的話,有兩種方法可供選擇:

7.1先把這個影片剪輯從庫中拖放到舞台上,在屬性面板上取一個執行個體名稱,例如
myClipInstance,然後你就可以通過代碼來控制舞台上這個影片剪輯的相關屬性了。下面代
碼定義該影片剪輯的座標為(300,200)
myClipInstance.x=300
myClipInstance.y=200

7.2     用純程式碼來操作。首先,在庫中選中影片剪輯,點擊“右鍵”->“連結”後出現連結屬性
對話方塊,選中“連結”->“為 ActionScript 匯出”,然後設定一個類名即可,例如 Mascot(注意,
類名首字母一般為大寫)。現在我們就用純程式碼的形式把庫中的這個影片剪輯添加到舞台上。
對此,我們先聲明一個變數作為該對象的執行個體,然後用 addChild 把它添加到顯示列表。代
碼如下:
var myMovieClip:Mascot=new Mascot() 
addChild(myMovieClip)
     因為我們沒有設定這個影片剪輯的任何屬性,所以它預設在舞台上的(0,0)位置顯示。我
們可以用這個執行個體的 x,y 屬性來設定它的座標,用 rotation 屬性來設定這個對象的旋轉度

var myMovieClip:Mascot=new Mascot() 
myMovieClip.x=275
myMovieClip.y=150
myMovieClip.rotation=10
addChild(myMovieClip)
     用上面的代碼把影片剪輯添加到舞台上看起來比較繁瑣,但是用代碼可以很容易地產生
多個此影片剪輯的副本,並把他們添加到舞台上。下面我們讓 Mascot 影片剪輯產生 10 個副
本,從左至右間隔 50 個像素水平排列,並把這個對象縮放為 50%。代碼如下:
for(var i=0;i<10;i++){
var mascot:Mascot=new Mascot() 
mascot.x=50*i+50
mascot.y=300
mascot.scaleX=.5
mascot.scaleY=.5
addChild(mascot)
}

8、按鈕的製作
下面介紹製作按鈕的三種方法

8.1第一種方法:(把影片剪輯製作成按鈕)
     把影片剪輯製作成可點擊的按鈕,首先,你需要利用前面的知識把該影片剪輯添加到舞
台上,然後在註冊一個可接受滑鼠事件的接聽程式即可。下面的代碼將庫中類名為Mascot 的
影片剪輯放在舞台的(100,150)處
var myMovieClip:Mascot=new Mascot() 
myMovieClip.x=100
myMovieClip.y=150
addChild(myMovieClip)
     下面來註冊這個接聽程式,你需要用到 addEventListener()偵聽函數,包括響應偵聽事件的
類型,該類型為常量,例如 MovieEvent.CLICK 將要響應一個滑鼠點擊事件,另外還需要包含
一個處理響應事件的函數
myMovieClip.addEventListener(MouseEvent.CLICK,clickMascot) 
function clickMascot(event:MouseEvent)
{
trace("你點擊了 mascot") 
}
     測試代碼時,這個 clickMascot 函數就會向輸出視窗發送一個事件。但是,在大多數情
況下,我們需要這個影片剪輯看起來更像按鈕,這是,就用到了 buttonMode 屬性。把它設
置為 true 後,當你的滑鼠划過這個影片剪輯的時,滑鼠的箭頭形狀就會變成手型了。
myMovieClip.buttonMode=true

8.2第二種方法:(將按鈕添加到舞台)
     當然,你還可以建立一個按鈕執行個體,就像我們對影片剪輯的操作一樣,在這裡,把庫中
的按鈕連結類名命名為 LibraryButton
var myButton.LibraryButton=new LibraryButton()
myButton.x=450
myButton.y=100
addChild(myButton)
     這個按鈕的形式與前面影片剪輯最大區別就是,雙擊按鈕,可以看到,在時間軸上按鈕
有 4 個不同的幀,第一幀為滑鼠划過之前顯示的狀態;第二幀為滑鼠經過時顯示的狀態;第
三幀為滑鼠按下還未釋放時顯示的狀態;最後一幀為按鈕的點擊地區,該地區在任何時候都
是不可見的。下面,你還可以為這個按鈕添加上偵聽,代碼如下:
myButton.addEventListener(MouseEvent.CLICK,clickLibraryButton) 
function cliclLibraryButton(event:MouseEvent) 
{
trace(你點擊了 Library Button!)
}

8.3第三種方法:
     用 SimpleButton 類型建立,這時,你需要有 4 個大小一樣的影片剪輯,連結類名為
ButtonUp,ButtonOver,ButtonDown,ButtonHit,然後用 SimpleButton 構造方法,把這四個影片剪輯傳遞給 SimpleButton 的執行個體,代碼如下:
var mySimpleButton:SimpleButton=new SimpleButton(new ButtonUp(),new ButtonOver(),new
ButtonDown(),new ButtonHit()) 
mySimpleButton.x=450
mySimpleButton.y=250
addChild(mySimpleButton)
另外,還可以添加一個偵聽函數
mySimpleButton.addEventListener(MouseEvent.CLICK,clickSimpleButton) 
function clickSimpleButton(event:MouseEvent)
{
trace(你點擊了 Simple Button!)
}

9、繪製超連結文本

其中最簡單的方法就是用 htmlText 屬性,在裡面添加 HTML 程式碼,例如
var myWebLink:TextField=new TextField() 
myWebLink.htmlText="點擊後面連結訪問我的部落格<A HREF='http://xiaocui.blogbus.com'>Flash
指令碼學習</A>"
addChild(myWebLink)
測試上面代碼,我們發現連結能夠正常使用了,我們想以下,如果讓連結加上底線,改變字型的顏色應該怎麼處理呢?我們來看下面的代碼:
var myStyleSheet:StyleSheet=new StyleSheet() 
//注意顏色值的格式為#FFFFFF
myStyleSheet.setStyle("A",{textDecoration:"underline",color:"#0000ff"}) 
var myWebLink:TextField=new TextField() 
myWebLink.width=300
myWebLink.styleSheet=myStyleSheet 
myWebLink.htmlText="點擊後面連結訪問我的部落格<A HREF='http://xiaocui.blogbus.com
指令碼學習</A>"
addChild(myWebLink)
另外,我們還可以不用連結到網頁視窗,還可以用偵聽的方式,例如:
myLink.htmlText="Click<A HREF='event:testing'>here</A>"
addEventListener(TextEvent.LINK,textLinkClick) 
function textLinkClick(event:TextEvent)
{
trace(event.text)
}

10、設定層深

setChildIndex 方法允許你向上或向下移動顯示對象在顯示列表內的位置。你可以把顯示列表
考慮成一個數組,它的索引位置是從第 0 層開始的。如果你建立了 3 個顯示對象,那麼他們
的位置就是第 0,1,2 層。第二層的對象在外面,第 0 層的在最裡面。
如果你想把某一個影片剪輯移動到所有顯示對象的最裡層,可以用
setChildIndex(myMovieClip,0)
執行這條語句之後,其餘的對象將會自動往上提升一層,及他們的索引位置都加上了 1,原
來第 0 層的元素移到了第1 層,第1 層的元素移到了第 2 層……
如果想把某一顯示對象移到所有對象的上面,這時就要用到 numChildren 屬性,它的含義就
是該容器內顯示對象的數目。比如現在某一容器內有三個顯示對象,這個 numChildren 的值就是 3,層次列表分別是第 0,1,2 層。那麼,最外層的層深就是第 numChildren-1 層。
setChildrenIndex(myMovieClip,numChildren-1)
為了更好的理解設定層深的問題,書中作者給我們提供可一個執行個體 settingSpriteDepth.fla,
用代碼產生圓的三個副本,並把它交錯疊放在舞台上,你可以點擊其中的任何一個圓,讓它
顯示在最外面(設定層深為最高)

11、target 表示發生事件的顯示對象,而非容器;而 currentTarget 為當前偵聽事
件的節點,往往是容器。只有當添加事件偵聽的顯示對象和發生事件的顯示對象為同一個時,
currentTarget 才會於target 相等。此時,currentTarget 才可能是非容器顯示對象。那麼,上面的代碼,我們就可以這樣來理解,當滑鼠點擊到圓形上時,event.target 就指圓形這個顯
示對象,而 event.currentTarget 就指圓形這個顯示對象的容器。顯然,只有容器裡面才能夠
存放顯示對象,用 target 的話系統就會報錯。

12、鍵盤輸入

     在遊戲設計過程中,我們不用擔心按鍵是否被按下,更關心的是這個鍵一直被按著。比
如,我們在玩駕駛遊戲過程中,怎樣通過向上的方向鍵來控制汽車油門的操作。這時,就需
要我們給按鍵設定一個布爾值,按下時為 true,彈起時為 false。不管在什麼時候,我們只
需要通過檢測這個布爾值就知道鍵盤是否被按下了。

13、文本輸入

TextField 對象有一種類型為輸入文本,它與靜態文本和動態文本的區別就是,輸入文本是可
選的,並且還可以往裡面輸入內容。

這樣建立的文本在螢幕的左上方,很難找到,也沒有邊框,我們可以用 TextFormat 屬性做
一些改進。
下面的代碼把字型設定為 12 號,位置(10,10),高度 18.寬度 200,有邊框
var inputFormat:TextFormat = new TextFormat();
inputFormat.font = 'Arial';
inputFormat.size = 12;
var myInput:TextField = new TextField(); 

myInput.type = TextFieldType.INPUT;
myInput.defaultTextFormat = inputFormat;
myInput.x = 10;
myInput.y = 10; 
myInput.height = 18;
myInput.width = 200; 
myInput.border = true; 
addChild(myInput); 
stage.focus = myInput;
最後一行的代碼設定文本輸入游標在文本域內。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.