最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳細(xì)剖析Flash Player重繪

  發(fā)布時(shí)間:2010-05-17 14:49:39   作者:佚名   我要評(píng)論
深入理解Flash Player重繪
Flash Player 會(huì)以SWF內(nèi)容的幀頻速度來(lái)刷新需要變化的內(nèi)容,而這個(gè)刷新的過(guò)程,我們通常稱為“重繪(redraw)”,相信即便是初級(jí)的菜鳥(niǎo)也知道,只要使用的是Debug版本的Flash Player, 右鍵菜單里就會(huì)有“Show Redraw Regions (顯示重繪區(qū)域)” 這個(gè)選項(xiàng),當(dāng)此選項(xiàng)打開(kāi)的時(shí)候,我們就能清楚地看到此刻場(chǎng)景內(nèi)被重繪的區(qū)域。



那么什么情況下會(huì)發(fā)生重繪呢?
1、最常見(jiàn)的是情況就是舞臺(tái)上的可視組件在形狀、位置、狀態(tài)(alpha, scale...)發(fā)生改變的時(shí)候會(huì)觸發(fā)Flash Player 的重繪。
2、當(dāng)一個(gè)DisplayObject的層級(jí)(ChildIndex)發(fā)生改變的時(shí)候也會(huì)導(dǎo)致重繪。
3、當(dāng)你將一個(gè)Sprite / MovieClip 的buttonMode 設(shè)置為 true 的時(shí)候,即便是單幀動(dòng)畫(huà),重繪會(huì)在MouseEvent.MOUSE_DOWN的時(shí)候觸發(fā)。又或者你對(duì)DisplayObject設(shè)置層級(jí)的時(shí)候,即便DisplayObject的層級(jí)沒(méi)有發(fā)生改變,也會(huì)使得 Flash Player對(duì)此顯示對(duì)象進(jìn)行重繪。
既然重繪是為了能夠?qū)@示內(nèi)容進(jìn)行更新,那么一個(gè)Flash應(yīng)用程序就不可避免的要觸發(fā)重繪。而重繪卻是性能消耗的主要根源,一個(gè)有經(jīng)驗(yàn)的Flash開(kāi)發(fā)人員寫(xiě)出的Flash應(yīng)用,其性能可能70% - 90%(甚至更高)是消耗在重繪上,那么提高Flash應(yīng)用程序的運(yùn)行效率和減少重繪有著莫大的關(guān)系。
要減少重繪,首先我們需要對(duì)單位每幀重繪大小這個(gè)概念進(jìn)行量化:重繪的大小應(yīng)該取決于數(shù)量和面積。數(shù)量取決(但不是完全取決)于可視范圍內(nèi)的需要更新的顯示對(duì)象的數(shù)量,假設(shè)場(chǎng)景上有兩個(gè)閃爍的小圓點(diǎn)并且寬和高都為20,那么重繪的數(shù)量為3,而重繪的總面積就為: 20 * 20 * 3 = 1200 (平方像素)。



簡(jiǎn)單的看看上面的公式是不是覺(jué)得重繪面積的計(jì)算很容易呢?那么繼續(xù)估計(jì)下下面這個(gè)情況的重繪面積是多少:

如果你計(jì)算的結(jié)果是: 20 * 20 * 6 = 2400 (平方像素),那么恭喜你,答錯(cuò)了...
根據(jù)上面的介紹,重繪的大小理應(yīng)就是重繪的數(shù)量 * 單個(gè)區(qū)域的面積,可是為什么說(shuō)這個(gè)情況就錯(cuò)呢?讓我們看看問(wèn)題究竟出在什么地方:

讓人覺(jué)得奇怪的地方出現(xiàn)了,重繪區(qū)域的數(shù)量依舊是3,而面積卻增大了不少,按照?qǐng)D上給出的坐標(biāo)信息,我們不難算出,總重繪面積的大小為:
20 * (70 - 20 + 20) * 3 = 4200 (平方像素),比起預(yù)先估算的 2400 (平方像素)整整大了 75%!
或許從這個(gè)地方開(kāi)始,大家就開(kāi)始覺(jué)得困惑了。的確,F(xiàn)lash Player的重繪面積并沒(méi)有按照我們之前的設(shè)想那樣來(lái)計(jì)算,但是依舊能找到一些規(guī)律,仔細(xì)來(lái)看以下幾種況:

如果你夠細(xì)心,應(yīng)該不難看出每次 Flash Player 重繪的區(qū)域不會(huì)超過(guò)3個(gè),即便舞臺(tái)上有多于三個(gè)的顯示對(duì)象需要被重繪,F(xiàn)lash Player 會(huì)將其中的兩個(gè)或者多個(gè)集合(根據(jù)位置來(lái)判斷)在一起,然后重繪在一個(gè)大區(qū)域里面,至此,我們暫時(shí)可以將上面兩個(gè)重繪法則命名為三區(qū)域法則就近合并法則,通過(guò)總結(jié)出來(lái)的這兩個(gè)法則,我們就能更加容易地理解Flash Player 重繪的機(jī)制,以及解釋在日常調(diào)試中遇到的一些重繪現(xiàn)象了。比如QQ牧場(chǎng)里幾個(gè)靠得比較近得小動(dòng)物被放在一個(gè)區(qū)域里面重繪,而有些動(dòng)物則不然,被單獨(dú)重繪。
當(dāng)我們了解了重繪機(jī)制后,那么接下來(lái)就應(yīng)該進(jìn)一步去了解如何避免多余的重繪,下面列舉的方法可能大部分都是被大家所熟悉的。
1、當(dāng)一個(gè)帶有動(dòng)畫(huà)效果的DisplayObject在不顯示的時(shí)候,不僅僅是將其 visible 屬性設(shè)置為 false, 因?yàn)橹乩L依舊會(huì)進(jìn)行,這里你可以選擇暫停掉動(dòng)畫(huà),又或者利用removeChild(displayObject) 直接將此對(duì)象移除出顯示列表。
2、不出現(xiàn)在可視范圍內(nèi)外觀變化的顯示對(duì)象其實(shí)是不會(huì)發(fā)生重繪的,這點(diǎn)相信是Flash本身做了優(yōu)化,也就是說(shuō)我的Stage.stageWidth 和 Stage.stageHeight 都為200的情況下,一個(gè)處在舞臺(tái)上的變化的顯示物體,坐標(biāo)為(200, 200) 寬高都為10,此時(shí)Flash Player重繪內(nèi)容并不會(huì)包括此對(duì)象,新版本的Flash Player 甚至在瀏覽器窗口最小化的時(shí)候會(huì)關(guān)閉掉所有的重繪,這個(gè)時(shí)候你往往會(huì)發(fā)現(xiàn)CPU占用率驟降,但是應(yīng)用程序依舊在運(yùn)行。
3、在設(shè)置DisplayObject的層級(jí)的時(shí)候請(qǐng)先做一個(gè)判斷: if(myContainer.getChildIndex(myChild)!=0)
{
myContainer.setChildIndex(myChild,0);
}

運(yùn)氣好的話,這個(gè)判斷最高能帶來(lái)200%以上的效率提升。
4、當(dāng)你的Sprite / MovieClip 設(shè)置 cacheAsBitmap = true 這個(gè)屬性的時(shí)候,當(dāng)此顯示對(duì)象內(nèi)很小的一個(gè)區(qū)域(甚至是被遮蓋著的物體)發(fā)生變化,會(huì)導(dǎo)致整個(gè)Sprite / MovieClip重繪。
5、盡量確保活動(dòng)的顯示內(nèi)容在非可見(jiàn)區(qū)域被暫?;顒?dòng)或者干脆直接移除出顯示列表,這里提到的不可視區(qū)域不僅僅是舞臺(tái)外不可見(jiàn)的,還包括舞臺(tái)內(nèi)被其他物體遮蓋住的顯示對(duì)象。正如之前提到的,重繪是Flash Player性能消耗的主要大戶,所以去優(yōu)化減小重繪區(qū)域面積,減少不必要的重繪操作次數(shù),往往能夠帶來(lái)比較大的性能優(yōu)化回報(bào)。

相關(guān)文章

  • flash如何制作形狀補(bǔ)間動(dòng)畫(huà)?flash創(chuàng)建補(bǔ)間形狀技巧

    flash一款功能強(qiáng)大的動(dòng)畫(huà)制作軟件,制作動(dòng)畫(huà)很非常的方便,但動(dòng)畫(huà)過(guò)程使用的都是形狀補(bǔ)間功能。今天小編就來(lái)給大家介紹一下flash形狀補(bǔ)間動(dòng)畫(huà)制作方法,感興趣的快來(lái)看看吧
    2022-05-11
  • flash cs6怎么做花朵成長(zhǎng)的逐幀動(dòng)畫(huà)?

    flash cs6怎么做花朵成長(zhǎng)的逐幀動(dòng)畫(huà)?flash中想要繪制一個(gè)花開(kāi)的動(dòng)畫(huà),該怎么畫(huà)出各個(gè)圖形然后做逐幀動(dòng)畫(huà)呢?下面我們就來(lái)看看詳細(xì)的教程,需要的朋友可以參考下
    2021-03-09
  • Flash怎么將動(dòng)畫(huà)復(fù)制為ActionScript3.0并使用?

    Flash怎么將動(dòng)畫(huà)復(fù)制為ActionScript3.0并使用?Flash中制作的動(dòng)畫(huà)想要直接粘貼到另一個(gè)對(duì)象中,我們可以使用復(fù)制腳本代碼的方式復(fù)制動(dòng)畫(huà),下面我們就來(lái)看看詳細(xì)的教程,需
    2017-12-08
  • flash怎么制作漫畫(huà)人物行走的動(dòng)畫(huà)?

    flash怎么制作漫畫(huà)人物行走的動(dòng)畫(huà)?flash中想要制作一段行走的動(dòng)畫(huà),該怎么設(shè)計(jì)呢?下面我們就來(lái)看看詳細(xì)的教程,很簡(jiǎn)單,需要的朋友可以參考下
    2017-04-18
  • flash逐幀動(dòng)畫(huà)制作全過(guò)程解析

    這篇教程是向腳本之家的朋友分享flash逐幀動(dòng)畫(huà)制作全過(guò)程,教程非?;A(chǔ),很適合新手來(lái)學(xué)習(xí),推薦過(guò)來(lái),有興趣的朋友可以過(guò)來(lái)學(xué)習(xí)
    2016-01-15
  • Flash正確的口型吻合動(dòng)畫(huà)技巧

    下面小編就為大家介紹利用Flash正確的口型吻合動(dòng)畫(huà)技巧,教程很不錯(cuò),非常適合新手來(lái)學(xué)習(xí),推薦到腳本之家,喜歡的朋友一起來(lái)學(xué)習(xí)吧
    2015-01-15
  • Flash動(dòng)畫(huà)制作技巧 圖形元件相關(guān)知識(shí)介紹

    這篇教程是向腳本之家的朋友介紹Flash動(dòng)畫(huà)制作技巧:圖形元件相關(guān)知識(shí),教程很基礎(chǔ),但很實(shí)用,推薦到腳本之家,喜歡的朋友可以過(guò)來(lái)學(xué)習(xí)一下,希望能對(duì)大家有所幫助
    2015-01-05
  • Flash動(dòng)畫(huà)制作小黑人經(jīng)典動(dòng)畫(huà)效果技巧介紹(圖文)

    本教程是向大家介紹Flash動(dòng)畫(huà)制作小黑人經(jīng)典動(dòng)畫(huà)效果技巧,教程很經(jīng)典,介紹的非常詳細(xì),相信對(duì)學(xué)習(xí)Flash朋友有一定的幫助。轉(zhuǎn)發(fā)過(guò)來(lái),希望對(duì)大家有所幫助
    2014-08-05
  • Flash制作旋轉(zhuǎn)的3D立體盒動(dòng)畫(huà)教程

    本教程是向大家介紹利用Flash制作旋轉(zhuǎn)的3D立體盒動(dòng)畫(huà)教程,制作出來(lái)的效果非常好看,教程介紹的很詳細(xì),希望大家通過(guò)本篇教程能學(xué)習(xí)Flash制作3D動(dòng)畫(huà)的方法,這樣以后就可以
    2014-07-22
  • Flash cs3制作人物行走動(dòng)畫(huà)技巧圖文解析

    本教程向大家介紹了Flash cs3制作人物行走動(dòng)畫(huà)技巧,并做了詳細(xì)的介紹,覺(jué)得教程很不錯(cuò),轉(zhuǎn)發(fā)過(guò)來(lái),希望給朋友們帶來(lái)幫助
    2014-07-15

最新評(píng)論

开原市| 枣庄市| 广水市| 区。| 丘北县| 云梦县| 潮安县| 许昌市| 高邑县| 会同县| 石家庄市| 舒兰市| 兴文县| 江西省| 正定县| 密云县| 樟树市| 平和县| 金乡县| 内乡县| 临夏县| 兰西县| 新泰市| 玉环县| 康平县| 鸡泽县| 香格里拉县| 东阿县| 四会市| 上蔡县| 保亭| 应城市| 平谷区| 察隅县| 丹江口市| 那坡县| 维西| 长阳| 汶上县| 巴青县| 棋牌|