【问题标题】:How to draw line - not on Canvas, just object?如何画线 - 不在画布上,只是对象?
【发布时间】:2020-12-27 17:43:03
【问题描述】:

我正在将我的游戏移植到 QML,但遇到了一个难题。看这张图:

三角形是精灵,线条是力向量。我可以在 QML 中显示精灵,但我不明白如何绘制矢量。它的长度可以大于精灵大小。

我想我可以使用 Rectangle 和 1px 的 height,但我不知道如何旋转它。

力可以在每一帧发生变化,因此绘图性能必须良好。

【问题讨论】:

  • QML 中的docs on rotation,不知道性能是否足够好。
  • 看看这个great answer
  • @BaCaRoZzo 将链接作为答案
  • @Robotex 你认为这个答案比提供和接受的答案更合适吗?如果这种情况我们应该简单地投下最后一票,我认为。

标签: qt qml qtquick2


【解决方案1】:

如果您不想使用Canvas,有几个选项:

  • 实现QQuickPaintedItem - 它使用QPainter API 在 QML 项目上绘图。最简单的解决方案,但如果您进行大量绘图,则效率不高。

  • 实现自定义QQuickItem - 它更复杂,你必须实现额外的东西,但它会更快,因为它会使用场景图 API,所以你的渲染会得到优化

  • 使用Qt3D模块,虽然是3d图形,但也可以2d绘图。

最后,显然你可以通过创建一个非常窄和宽的Rectangle 并给它一些旋转来画一条线。但这是一个非常笨拙的解决方案。我建议您研究第二个选项,并检查一些示例,使用自定义几何图形和着色器实现 QQuickItemHere is one similar example.

更新: 从 Qt 5.10 开始,还有 qml Shape 元素,它提供了一种定义矢量形状的声明方式,IMO 是在 qml 中拥有参数图形的最简单方法。缺点是性能不是很出色,但如果您不使用过多的元素,它仍然是完全可用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-24
    • 2016-07-29
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多