Flash Actionscript 優(yōu)化指南
互聯(lián)網(wǎng) 發(fā)布時間:2008-10-06 01:25:37 作者:佚名
我要評論
第一章 AS3的一些優(yōu)化計算方法
用乘法來代替除法(當(dāng)除數(shù)可轉(zhuǎn)化為有限數(shù)的時候)。比如var n:Number = value * 0.5;要比var n:Number = value / 2;快。但差別并不是很大。只有在需要大量計算情況下,比如3D引擎中差別才比較明顯。
用位運算代替除2或乘2。比如10>
onEnterFrame 事件
onEnterFrame事件對于游戲開發(fā)者而言是非常有用的,它使得我們能夠快速、反復(fù)地按照預(yù)設(shè)幀頻(fps)運行一段程序。回想在Flash5的時代,這(onEnterFrame實時監(jiān)控)是一種非常流行的技術(shù),用這樣的事件來控制機(jī)器游戲?qū)κ值倪壿?,又或者我們可以在每一個子彈上設(shè)置這樣的事件來監(jiān)測子彈的碰撞。
實際上,我們并不推薦給過多的MoveClip添加這樣的事件,因為這樣做會導(dǎo)致“無頭緒碼(spaghetti code)”的出現(xiàn),并且容易導(dǎo)致程序效率明顯降低。
大多數(shù)情況下,用單獨一個onEnterFrame事件就可以解決問題了:用這一個主循環(huán)來執(zhí)行你所需要的操作。
另一個簡單的辦法是設(shè)置一個合適的幀頻:要知道幀頻越高,CPU資源就越緊張。在幀頻為25-35(fps)之間時,onEnterFrame足以很好地執(zhí)行較復(fù)雜代碼,哪怕你的計算機(jī)配置較低。因此,在沒有特殊要求的場合,我們不推薦使用高于60(fps)的幀頻。
矢量圖與位圖
在處理圖形前,我們一定要做出正確的選擇。Flash能對矢量圖和位圖進(jìn)行完美的兼容,然而矢量圖和位圖在播放器中的表現(xiàn)實質(zhì)卻完全不同。在用到矢量圖的時候,我們要盡可能簡化它們的形狀,去除多余的端點。這樣做將大大降低播放器用于呈現(xiàn)矢量圖所要進(jìn)行的計算量。另一個重要方面在于線條的運用,盡量減少和避免冗陳的線條結(jié)構(gòu),因為它們會直接影響到flash的播放效率。
當(dāng)某個實例透明度小于100時,也會對播放速率造成影響,所以如果你發(fā)現(xiàn)自己的Flash播放速率過慢,就去挑出這些透明的實例來吧!
那么,如果真的需要呈現(xiàn)比較復(fù)雜的場景時,你就最好考慮使用位圖實現(xiàn)。雖然Flash在對位圖的渲染效率上并不是最優(yōu)越的(比如和Flash的“兄長”Director比起來),但豐富的視覺內(nèi)容呈現(xiàn)只能靠位圖(與位圖同復(fù)雜度的矢量圖形渲染速率非常低)了,這也是很多基于區(qū)塊的游戲中廣泛采用像素圖作為背景的原因。順便要提到的是,F(xiàn)lash雖然對GIF,JPG和PNG都有所支持,但是渲染速度上PNG還是占有絕對優(yōu)勢,所
以我們建議flash中的位圖都盡可能采用PNG格式。
影片剪輯(MovieClip)的可視性[下面將MovieClip簡稱為mc]
您可能會經(jīng)常碰到這樣一種情況:有大量不可見/屏幕外的mc等待出場(比如游戲中屏幕外的地圖、人物等等)。
要知道,播放器仍然要消耗一定的資源來處理這些不可見/屏幕外的mc,哪怕他們是單幀,非播放的狀態(tài)。
最好的解決辦法之一是給這些mc一個空白幀,當(dāng)他們不出現(xiàn)在屏幕上時,你能用gotoAndStop()語句跳轉(zhuǎn)到這一幀,從而減少播放器對資源的需求。
請務(wù)必記住,這種情況下,簡單的設(shè)置可見度屬性為不可見( _visible = false )是無效的,播放器將繼續(xù)按照這些mc所停留或播放的幀的復(fù)雜度來分配資源。
數(shù)組
數(shù)組在各種需要記錄數(shù)據(jù)的應(yīng)用程序和游戲中都被廣泛的使用。
一個典型的例子就是基于區(qū)塊的Flash游戲,在這樣一類的游戲中,地圖有時被存放成形如arr[y][x]的二維數(shù)組。雖然這是一種很常見的方法,但是如果用一維數(shù)組的話,卻能提高程序的運行效率。另一個重要的方法來提高數(shù)組效率是在數(shù)組遍歷的時候使用for in 循環(huán)來代替?zhèn)鹘y(tǒng)的 for 或者while循環(huán)語法。
例如:
一段代碼如下
for (var i in arr)
{
if (arr[i] > 50)
{
// 進(jìn)行某些操作
}
}
它的執(zhí)行速度明顯高于這一段代碼:
for (var i=0; i < 10000; i )
{
if (arr[i] > 50)
{
// 進(jìn)行某些操作
}
}
前者的效率比后者提高了30%,這個數(shù)字在你的游戲要逐幀執(zhí)行這一段代碼的時候顯得更加寶貴!
相關(guān)文章

flash cs6鼠標(biāo)跟隨效果實現(xiàn)代碼分享
flash cs6想要實現(xiàn)鼠標(biāo)跟隨效果?該怎么制作呢?今天我們就來看看使用as2.0實現(xiàn)鼠標(biāo)跟隨效果的教程,需要的朋友可以參考下2019-05-19
Flash cs6怎么使用代碼輸入中英文文本?Flash cs6中可以使用文字工具直接輸入文本,也可以使用代碼來輸入文本,該怎么使用代碼輸入文本呢?請看下文詳細(xì)的教程,需要的朋友2018-03-11
flash as3.0抽象類怎么定義? as3.0中有很多抽象類,該怎么定義抽象類和抽象方法呢?下面我們就來看看簡單的例子,需要的朋友可以參考下http://www.fzitv.net/softs/408402.2018-02-28
flash cs6中怎么使用ActionScript3.0?
flash cs6中怎么使用ActionScript3.0?flash cs6中想要使用ActionScript3.0功能,該怎么使用呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2018-01-25
Flash中怎么實現(xiàn)鼠標(biāo)點擊決定圖像位置?
本教程給大家分享一個Flash小教程,教大家在Flash CS6中怎么實現(xiàn)鼠標(biāo)點擊決定圖像位置?方法很簡單,感興趣的朋友歡迎前來一起分享學(xué)習(xí)2018-01-12
本教程教腳本之家的ActionScript教程學(xué)習(xí)者在Flash中如何用代碼將圖片放在自己想要的舞臺位置,教程講解的詳細(xì),感興趣的朋友歡迎前來分享學(xué)習(xí)2017-11-20
在Flash CS6中使用with函數(shù)繪制背景圖教程
本教程教腳本之家的ActionScript教程學(xué)習(xí)者如何在Flash CS6中使用with函數(shù)繪制背景圖?教程一步步講解的挺詳細(xì),方法也不難,非常適合Flash新手入門學(xué)習(xí)2017-11-18
Flash怎么設(shè)置元件坐標(biāo)?flash使用代碼設(shè)置元件的坐標(biāo)的教程
Flash怎么設(shè)置元件坐標(biāo)?flash中導(dǎo)如的元件需要添加坐標(biāo),該怎么定位元件坐標(biāo)呢?下面我們就來看看flash使用代碼設(shè)置元件的坐標(biāo)的教程,需要的朋友可以參考下2017-10-11
Flash怎么制作來回?fù)u擺的花朵的動畫?Flash中想要給花朵制作一段搖擺的動畫效果,該怎么制作呢?下面我們就來看看詳細(xì)的教程,很簡單,需要的朋友可以參考下2017-05-23
Flash怎么制作流動七彩色的文字?想要讓文字動起來,該怎么使用flash給文字制作一個流動七彩色的動畫呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2017-04-23











