我在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]
在应用程序上,该行最终看起来像这样:
您在白色中看到的数字是该行中的点数。我想要开始“腐朽”的界限'当它达到1500时。因此该行的第一个点将被删除,但该对象仍将附加到Points列表的顶部。
为了达到这个目的,我使用了以下代码:
if len(self.line.points)>1500:
del self.line.points[0]
这在某种程度上起作用 - 原始行开始从其开始删除。问题是出现第二行并且self.line.points继续追加。所以,最后我看起来像这样:
我想象的问题在于我必须使用其ORIGINAL位置实例化Line,当我删除第一个点时,小部件会丢失它的位置并开始根本运行。
无论是否是这种情况,我想知道是否有人遇到过这个问题和/或知道如何解决这个问题。
答案 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