如何監聽延遲渲染發生的事件

我需要在resize時候計算一些座標。這個計算用到getNodeToWorldTransform等函數

問題是resize發生的時候transform數據應該會有變化。但在resize發生的同時做計算得到的結果不對。

因為經過測試發現getNodeToWorldTransform拿到的數據。在延遲渲染後才會更新。

而我並不知道渲染發生的時機。

1赞

是否和cc.Director.EVENT_AFTER_DRAW 有關?

1赞

這些屬性值計算是在onresize事件回調中進行的嘛

這個問題我已經處理好了。貼出來給你參考

概括來說。先覆蓋掉cocoscreator引擎唯二的resize事件處理,禁用引擎的佈局處理
設置整個cocos鋪滿自己的canvas並始終保持100%

然後監聽EVENT_AFTER_VISIT,因為這個這個監聽的時候,transform的屬性才會得到更新。在resize中處理會一直出現錯位。同時因為這個事件會一直發生。所以在resize時候先紀錄一個標記。只在發生resize後的EVENT_AFTER_VISIT事件中進行座標同步運算

這個操作是為了製作跟隨節點的掛件物體。用到了坐標系的轉換。
node.getNodeToWorldTransformAR
node.getWorldToNodeTransform
cc.rectApplyAffineTransform
這些數據的獲得。必須在EVENT_AFTER_VISIT事件派發後才能保持同步。

1赞

順便吐槽一下官方回覆就是避重就輕。
要解決問題官方根本靠不住還是得靠自己
什麼引擎bug。設計缺陷。我現在提都懶得提
有bug。自己覆蓋。有缺陷。看源代碼逆推。

等人回覆?還不如等死

1赞