導致螢幕重繪的幾種原因:
1、最常見的是情況就是舞台上的可視元件在形狀、位置、狀態(alpha, scale…)發生改變的時候會觸發flash player 的重繪。
2、當乙個displayobject的層級(childindex)發生改變的時候也會導致重繪。
3、當你將乙個sprite / movieclip 的buttonmode 設定為 true 的時候,即便是單幀動畫,重繪會在mouseevent.mouse_down的時候觸發。又或者你對displayobject設定層級的時候,即便displayobject的層級沒有發生改變,也會使得 flash player對此顯示物件進行重繪。
4、在mousechild = true的情況下,滑鼠移動中從a物件移動到b物件上時,顯示列表中已有滿足觸發渲染條件的變動時會立即觸發渲染。
5、所有的鍵盤事件觸發時,顯示列表中已有滿足觸發渲染條件的變動時會立即觸發渲染。
6、開啟debug模式中的顯示重繪區域時,顯示列表中已有滿足觸發渲染條件的變動時會立即觸發渲染(這個請無視吧-_-)。
而且後面3個情況都會無視fp可視範圍內的bitmapdata中已經lock()的物件強制unlock()。
避免重繪的方法:
1、當乙個帶有動畫效果的displayobject在不顯示的時候,不僅僅是將其 visible 屬性設定為 false, 因為重繪依舊會進行,這裡你可以選擇暫停掉動畫,又或者利用removechild(displayobject) 直接將此物件移除出顯示列表。
2、不出現在可視範圍內外觀變化的顯示物件其實是不會發生重繪的,這點相信是flash本身做了優化,也就是說我的stage.stagewidth 和 stage.stageheight 都為200的情況下,乙個處在舞台上的變化的顯示物體,座標為(200, 200) 寬高都為10,此時flash player重繪內容並不會包括此物件,新版本的flash player 甚至在瀏覽器視窗最小化的時候會關閉掉所有的重繪,這個時候你往往會發現cpu佔用率驟降,但是應用
程式依舊在執行。
3、在設定displayobject的層級的時候請先做乙個判斷:
if (mycontainer.getchildindex(mychild) != 0)
運氣好的話,這個判斷最高能帶來200%以上的效率提公升。
4、當你的sprite / movieclip 設定 cacheasbitmap = true 這個屬性的時候,當此顯示物件內很小的乙個區域(甚至是被遮蓋著的物體)發生變化,會導致整個sprite / movieclip重繪。
5、盡量確保活動的顯示內容在非可見區域被暫停活動或者乾脆直接移除出顯示列表,這裡提到的不可視區域不僅僅是舞台外不可見的,還包括舞台內被其他物體遮蓋住的顯示物件更多參考:
導致flash螢幕重繪的幾種方式及避免重繪的方法
導致螢幕重繪的幾種原因 1 最常見的是情況就是舞台上的可視元件在形狀 位置 狀態 alpha,scale 發生改變的時候會觸發flash player 的重繪。2 當乙個displayobject的層級 childindex 發生改變的時候也會導致重繪。3 當你將乙個sprite movieclip...
讓Flash自適應瀏覽器螢幕大小的幾種方法
要讓flash自適應瀏覽器螢幕大小需要做到以下兩點 1 swf檔案隨著瀏覽器螢幕大小也相應改變大下 方法 在網頁裡除了放你的swf檔案外不要放其他的任何內容,並且swf檔案的寬,高都設為100 可以看我的原始檔裡的fullscreen.htm檔案 2 當swf檔案大小改變時,flash 內容也相應重...
Android View重繪和更新常用的方法
android開發過程中,由於個性化的需求越來越多,原生的系統的view已經不能滿足於產品的需要。所以開發過程中自定義view已經是家常便飯.在自定義view中我們經常會用重繪和更新常用的方法有 invalidate requestlayout invalidate方法會執行draw過程,重繪vie...