Kivy Canvas Line最大长度

时间:2017-08-17 16:19:43

标签: python kivy

我在Canvas上绘制一条线,基本上是特定对象所在位置的痕迹。使用以下代码绘制线:

with self.canvas:

            Color(0,0,1)

            if self.first:
                self.line = Line(points=[self.car.x,self.car.y],width=2)
                self.first = False

            self.line.points += [self.car.x, self.car.y]

在应用程序上,该行最终看起来像这样:

enter image description here

您在白色中看到的数字是该行中的点数。我想要开始“腐朽”的界限'当它达到1500时。因此该行的第一个点将被删除,但该对象仍将附加到Points列表的顶部。

为了达到这个目的,我使用了以下代码:

            if len(self.line.points)>1500:
               del self.line.points[0]

这在某种程度上起作用 - 原始行开始从其开始删除。问题是出现第二行并且self.line.points继续追加。所以,最后我看起来像这样:

enter image description here

我想象的问题在于我必须使用其ORIGINAL位置实例化Line,当我删除第一个点时,小部件会丢失它的位置并开始根本运行。

无论是否是这种情况,我想知道是否有人遇到过这个问题和/或知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

您一次只能删除一个坐标,当每个点由两个坐标构成时,您的代码中并不明显,但您可能认为您的点列表如下所示:

[[x1, y1], [x2, y2], [...], [xn, yn]]

虽然实际上它看起来像这样:

[x1, y1, x2, y2, [...], xn, yn]

所以当你逐个删除坐标时,行指令有点混乱。

[x1, y1, x2, y2, [...], xn]  # uh what?

解决方案是删除两个项而不是一个:)

        if len(self.line.points)>1500:
           del self.line.points[0]
           del self.line.points[0]

我在这里放了一个工作版本的代码(做了实验,所以不妨发布:)。)。

https://gist.github.com/tshirtman/603cbda8202103cb7845adb54bb90ee2