2017-08-17 99 views
2

我在画布上绘制了一条线,基本上是一个特定对象所在的轨迹。绘制直线用下面的代码:Kivy Canvas Line最大长度

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时开始“衰减”。因此线条的第一个点将被删除,但对象仍然会附加到点列表的顶部。

为了实现这个目标我用下面的代码:

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

这一工程在一定程度上 - 原线开始beeing从beggining删除。问题是出现第二行并且self.line.points继续追加。那么,到底我有一些看起来像这样:

enter image description here

我想象的问题就在于,我有原来的位置来实例化线,当我删除第一点,小部件会丢失它所在的位置,并开始按照顺序进行操作。

无论是否如此,我想知道是否有人有此问题和/或知道如何解决它。

回答

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

+0

哦是的!你是绝对正确的。我的一个疏忽。非常感谢您的详细解答! – Hookkid