2017-08-17 98 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