2017-08-17 15 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に達すると「崩壊」を開始したいと思います。そのため、行の最初の点は削除されますが、オブジェクトは依然としてPointsリストの先頭に追加されます。私は、次のコードを使用することを達成するために

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

ある程度動作します - 元の行は、そのbegginingから削除beeingて開始します。問題は、2行目が表示され、self.line.pointsが引き続き追加されることです。だから、最終的に私はこのように見て何かを持っている:

enter image description here

私は問題を想像してる、私は元の位置とするとき、私はその最初のポイントを削除してラインをインスタンス化する必要があるということですウィジェットはどこにいたのかを記録しておらず、erradicallyな動作を開始する。

このような場合でも、この問題を抱えているかどうか、誰かがそれを回避する方法を知っているかどうかを知りたいと思います。

答えて

1

あなたが唯一の各ポイントは二つの座標から構成されている時、で1つの座標を削除し、それはあなたのコードからも明らかではないのですが、あなたはポイントのリストは次のように見えることだと思うことがあります。

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

ながら、実際には次のようになります。

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

したがって、座標を1つずつ削除すると、ライン命令がちょっと混乱します。

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

ソリューションではなく、1 :)

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

の二つの項目を削除することです私は(ここでは、コードの作業バージョンを入れて実験してそれをやったので、同様にそれを投稿するかもしれません:) )。

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

+0

Ohはい!あなたは、絶対に正しい。私の一部の見落とし。あなたの詳細な答えをありがとう! – Hookkid