今天我遇到了這個話題,同時調查了一件很奇怪的事情。在我們的Flex應用程序中執行某些操作可能導致渲染幀的數量從12fps到30fps:加載的動畫開始高速播放,GUI開始鎖定。Flex發佈事件屏幕更新
由於我在Flex/Flash上讀到的所有內容都提到了「幀速率限制在頂級應用程序中設置的幀率」,看起來這些額外渲染可能發生的唯一方式是由於某些原因導致它們的事件(對舞臺的幀速率沒有程序上的改變可以在任何地方完成)。因爲它只發生在我將更新邏輯放在ENTER_FRAME處理程序中時,我試圖找出可能發生的情況,這顯然導致Flex渲染瘋狂。
假設:東西在我的更新功能被觸發即時屏幕更新,這引發了另一個立即ENTER_FRAME,這意味着我的更新循環被調用,從而引發另一即時屏幕更新,...
我們的Flex組件在我們的GUI中使用,如果這是一個因素。我不知道下一步該去哪裏。
澄清:
- 當我說的事情加快,有 兩種方式這表現。
- 首先,我的ENTER_FRAME處理程序獲得更多地調用 。
- 其次,一個 加載Flash SWF與循環 動畫內置突然加速 高達te點它看起來很愚蠢。
- 我沒有使用updateAfterEvent,我只有 發現這個問題時存在研究 這個問題。顯然,Sprite子類 上的一些 事件會自動調用此函數,如果這是根本原因,我不知道 。
- 我根本沒有對渲染做任何直接的討論。背景動畫自動播放,因爲他們有內置的CS3製作時間表,我們所有的更新功能所做的是改變的DisplayObject位置或添加/刪除等
更新: 我添加了一個標籤,我的應用程序打印stage.frameRate,並在某些時候發現,它突然從12變爲1000(允許的最大值)。儘管在我的ENTER_FRAME處理程序中添加一行以重置它並不是什麼大的幫助。 此外,即使這樣做,渲染也都搞砸了。某些操作(如提高警報彈出窗口)使其全部恢復生機。 不幸的是,我無法查看Stage類的源以在setter屬性上設置斷點。
這對Flex加載「設置爲1000fps」的事情非常有趣。我們有幾個Flex應用程序都提供了一個通用接口。主應用程序負責通過SWFLoader類根據需要加載這些模塊。但是,加載過程已經考慮到了延遲加載......當SWF加載時,我們等待SystemManager中的APPLICATION_COMPLETE。一旦收到,不應該完成申請嗎?
啊,我還沒有想出任何MXML組件的APPLICATION_COMPLETE。這當然與我所看到的有關。對此我需要進一步澄清,但將其作爲一個新問題提出是有道理的。 – MidnightGun 2008-09-30 20:06:39