2010-06-02 55 views
2

在我的Flex應用程序中,我有一個自定義的TitleWindow,以模式方式彈出。當我調整瀏覽器窗口大小時,出現以下警告:Flash/Flex:「警告:過濾器不會呈現」問題

警告:過濾器不會呈現。 DisplayObject的過濾尺寸(1286,107374879)太大而無法繪製。

很顯然,我沒有什麼用的107374879.

的高度之後設置,任何時候我鼠標懸停在Flash播放器(10節)的話,就是CPU攪動在100%。當我關閉TitleWindow時,問題就會消失。不幸的是,這個警告似乎並沒有指出哪個DisplayObject對象太大而無法繪製。我試着給TitleWindow和其中的組件附加明確的高度/寬度,但仍然沒有運氣。

[編輯]

情節複雜:「真正的」 我發現,當我設置到PopUpManager的createPopUp模態參數的問題只occures當模式設置爲「false」時,我看不到這種行爲。將灰色過濾器應用於來自模態的其他組件時失敗。任何想法如何追蹤尚未初始化但在模態階段正在過濾的對象?

感謝您的閱讀。

+0

你對此有一個簡單的可重複測試用例嗎?你也可能想要提交一個bug:http://bugs.adobe.com – 2010-06-07 14:46:07

回答

3

這可能不會在你的應用程序的情況下,但我所遇到的其中一個對象的高度或寬度已被設置爲一些不合理的大數目爲無符號的濫用的結果類似案件計算定位,高度或寬度的整數。

這樣的情景

原理代碼可能是這樣的:

var offset:uint = 30; 
var position:uint = txt.textHeight - offset; 
divider.y = position; 

錯誤地假定txt.textHeight總是會大於30.如果不是,txt.textHeight代碼 - 偏移將是一個負數,即當存儲在uint中時,它將變成一個非常大的數字。

比方說,例如txt中的文本,推測是長多行文本,而不是20像素高度的單行。結果將爲-10,並且當存儲在uint var位置時,位置的值將是4294967286.

上面是糟糕的代碼,一個例子,但是在現實世界的情況下,uint問題可能發生在一些更復雜的方式,可能很難立即發現。我想用一個無符號整數來表示像x和y這樣的東西,它可能有負值是一個好主意。

+0

我試圖在一個組件中手動居中放置一個標籤。該組件被用作嵌入式項目渲染器,並且其高度比標籤更短。垂直地將標籤居中放置在組件中,標籤的左上角位於Y = -2處。我正在用uint來計算居中的X,Y座標。調用label.move(2,-2)(帶有未簽名的int)導致標籤在無人區域放置,並且過濾器正在應用於整個應用程序(包括標籤處於關閉狀態) 。事實上,這個標籤是一堆視圖,但不是在視圖中,所以甚至是陌生人。 – davidemm 2010-06-07 15:21:53

+0

事實上,這是一個移動(x,y)問題,這使得診斷更加困難,因爲沒有任何組件具有任何不規則尺寸。 – davidemm 2010-06-07 15:28:50

3

您可以編寫一些代碼遞歸地降低DisplayObjectContainer和DisplayObject對象的層次結構並檢查較大的高度。

應該很簡單的寫。函數像這樣應該做的伎倆:

function RecurseDisplayObjects(DisplayObject obj):void 
{ 
    //check for height and do a trace() or whatever here 

    if(obj is DisplayObjectContainer) 
    { 
     var container:DisplayObjectContainer = obj as DisplayObjectContainer; 
     for(var i:int=0; i<container.numChildren; i++) 
     { 
      RecurseDisplayObjects(container.getChildAt(i); 
     } 
    } 
} 

您需要通過將其頂級的DisplayObject在應用程序啓動這一關。 (可能通過DisplayObject獲得。根)

你的另一個選擇是獲取Flex框架源並修改它以給你一個更有意義的錯誤。

+1

這有助於診斷我的問題。我發現沒有DisplayObject是奇怪的大小,因爲我的問題是內聯itemRenderer,它不會顯示爲孩子。 – davidemm 2010-06-07 15:23:07

+0

我不知道渲染器不會在顯示層次結構中顯示爲兒童 - 這很有用。感謝您的評論。 – DanK 2010-06-08 13:00:16

+0

這個!謝謝,DanK。我的問題與任何東西都沒有關係,只是用一個錯誤的座標將圖形繪製成圖形,這使得寬度非常大。 – 2011-07-03 02:03:13

1

問題可能不在您的TitleWindow中,而是在它下面的對象中。濾鏡無法渲染可能是模糊濾鏡閃光適用於模態對話框下的所有內容。如果舞臺上的其中一個物體太大而無法實時應用模糊,則會出現您提到的錯誤。

我解決了這個問題,將一個遮罩應用到titlewindow下面的對象,設置爲舞臺的大小。這可能會解決你的問題,但你一定要研究爲什麼有些東西達到這個尺寸,聽起來不健康。 :-)

0

我有一個類似的問題,將其跟蹤到應用於縮放到-0.23453422334的對象的alpha濾鏡。一旦我將比例四捨五入到有效數字,一切正常。然而,一個難以追查的錯誤。