我想知道如何加速绘制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