如何在HTML5画布上正确绘制多种不同宽度的线条?

5
我正在开发一个应用程序,在屏幕上绘制类似思维导图的对象网络,然后绘制对象之间的连接。线条的宽度应该表示连接的强度。这些连接会随着时间而改变,但很多连接被错误地绘制了。我可以百分之百确定我实际上改变了正确的连接,只是绘制得不好。
因此,以下是我的绘制方法,请告诉我我做错了什么?如何才能做到正确呢?
  for (o = 0; o < self.brain.objects.length; o++)
       for (con =  0; con < self.brain.objects[o].connections.length; con++)
       {
            self.screen.lineWidth = Math.sqrt(self.brain.objects[o].connections[con].weight)*5*self.zoom;

            self.screen.beginPath();
            self.screen.moveTo((self.brain.objects[o].rect[0] - self.globalPos[0])*self.zoom + (self.brain.objects[o].rect[2]/2)*self.zoom, (self.brain.objects[o].rect[1] - self.globalPos[1] + self.brain.objects[o].rect[3]/2)*self.zoom);
            self.screen.lineTo((self.brain.objects[o].connections[con].to.rect[0] - self.globalPos[0] + self.brain.objects[o].connections[con].to.rect[2]/2)*self.zoom, (self.brain.objects[o].connections[con].to.rect[1] - self.globalPos[1] + self.brain.objects[o].connections[con].to.rect[3]/2)*self.zoom);
            self.screen.stroke();
       }
1个回答

6

你已经有了正确的代码来绘制不同宽度的线。

这里有一个 jsFiddle 来展示代码的运行情况, http://jsfiddle.net/q9LRs/

问题很可能是由于计算 lineWidth 时引起的。在一些浏览器中,你可能还需要调用 closePath()。

试着简化你的示例并发布工作的代码,这样我们就可以看到问题所在了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接