3

我正在尝试在画布上绘制建筑物的粗略轮廓。我通过为每一侧创建一系列正方形,加上顶部的“屋顶”,然后基本上按照 Painter 的算法按顺序绘制它们来实现下面的效果。

左侧的屏幕截图显示了它的外观。这是分别绘制每个正方形。

为了提高性能,我希望尽可能少的 .stroke() 和 .fill() 调用,因此我将所有 moveTo() 和 lineTo() 调用排队,并一次性绘制它们。测试表明(至少对于线路而言)这带来了巨大的性能改进,我自己也验证了这一点。

不幸的是,正如你从右边的截图中看到的那样,当我在最后只画一次建筑物时,分层基本上被破坏了。它以看似随机的顺序绘制事物。

画布应该以这种方式工作吗?为什么它不按照我告诉它绘制的顺序绘制所有内容,就像第一个屏幕截图一样?有谁知道解决这种行为的好方法?

模拟 3d 建筑物

4

1 回答 1

1

如果您将所有 moveTos 和 lineTos 等作为一大批发送,它将像渲染一个大形状一样绘制它们(您希望看到所有内部笔划)。

运行多个绘制操作会有轻微的性能损失,但通常不值得让您的代码更难理解和调试。

于 2012-12-31T03:29:44.400 回答