我想知道如何加速繪製QML場景來顯示由六邊形瓷磚組成的遊戲地圖。每個圖塊都是在啓動時通過JavaScript動態實例化的qml項目。基於鼠標移動切換每個圖塊的高亮屬性。QML畫布性能問題
圖塊對象類似於這樣:
Item {
id: tile
x: // is set to fixed value by JS code on item instantiation
y: // is set to fixed value by JS code on item instantiation
width: // is set to fixed value by JS code on item instantiation
height: // is set to fixed value by JS code on item instantiation
property bool highlight: false
Canvas {
id: background
anchors.fill: parent
onPaint: {
// draw filled hexagon
}
}
Canvas {
id: border
anchors.fill: parent
onPaint: {
// draw hexagon outline
}
}
Canvas {
id: highlightItem
anchors.fill: parent
visible: highlight
onPaint: {
// draw filled yellow hexagon
}
}
}
的問題是,這種類型的場景是切換時的單瓦亮點,約在〜300瓦11fps總在場景渲染死慢。
如果我刪除背景和邊框畫布元素,我得到的幀率是三倍以上。我已經確認在初始繪畫操作完成後,onPaint()方法都不會再被調用。
下面是單個高亮事件的QML分析器視圖以及信號處理器處理所花費的時間。細線是切換高亮屬性的位置。
有沒有人有想法,爲什麼這麼簡單的場景如此之慢以及如何加速?
我很早就對此進行了檢查。創建一個貼圖後,每個''onPaint()''方法只需要調用一次。切換高亮顯示時,在任何畫布項上都沒有進一步的「onPaint()」調用,至少沒有執行調用的console.log('paint')調用。 – advancingu