<p>我有:</p>
<pre class="lang-py prettyprint-override"><code>class ourLine(Line):
widget=None
vLines=[]
firstime=True
def __init__(self,relto=Window,**kwargs):
self.kwargs=kwargs
if not self.widget:
print('you should inherit a new class with \'widget\' attr')
super(ourLine,self).__init__(**kwargs)
W, H = Window.width, Window.height
self.rBezier=kwargs['bezier']
self.vBezier=[]
c=0
for p in self.rBezier:
c+=1
if not c%2:
self.vBezier.append(p/H)
else:
self.vBezier.append(p/W)
self.__class__.vLines.append(self)
del self.kwargs['bezier']
def deAbstractor(self):
W, H = self.__class__.widget.width, self.__class__.widget.height
_vBezier=[]
c=0
with self.__class__.widget.canvas:
for p in self.vBezier:
c+=1
if not c%2:
_vBezier.append(p*H)
else:
_vBezier.append(p*W)
Line(bezier=_vBezier, **self.kwargs)
def dyna(c,w,s):
print(w)
for l in c.vLines:
l.__class__.widget.canvas.clear()
for l in c.vLines:
l.deAbstractor()
def activate(c):
c.widget.bind(size=lambda w,s: myLine.dyna(myLine,w,s))
</code></pre>
<p>这可能有点混乱,可能包含一些不必要的内容。那是因为,首先我想让它更先进。但后来有点疯狂了。但这仍然是一个做矢量线的好方法。它支持宽度和您在行中提供的其他属性(我希望如此)。颜色不会改变,但可以实现。让我们看看它的实际行动:</p>
<pre class="lang-py prettyprint-override"><code>import kivy
from kivy.app import App
from kivy.graphics import *
from kivy.core.window import Window
from kivy.uix.floatlayout import FloatLayout
from guy.who.helped import ourLine
root=FloatLayout()
#tell us your widget so we can refer
class myLine(ourLine):
widget=root
#you may want to start listening later, so it is manual.
ourLine.activate(myLine)
#you can start using like a normal Line
with root.canvas:
Color(1,1,0,1)
myLine(bezier=[2,70,90,80,Window.width,Window.height])
myLine(bezier=[200,170,309,80,Window.width/2,Window.height*0.8], width=12)
class MyApp(App):
def build(self):
return root
if __name__ == '__main__':
MyApp().run()
</code></pre>
<p><a href="https://i.stack.imgur.com/1kfFq.gif" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/1kfFq.gif" alt="Enter image description here"/></a></p>
<p>这篇文章比其他的好吗?嗯,这可以使用<a href="https://en.wikipedia.org/wiki/B%C3%A9zier_curve" rel="nofollow noreferrer">Bézier curves</a>,而不是<em>点</em>,并且是响应性的</p>
<p>奇怪的是,它的性能并没有那么差。
当您调整窗口大小时,它将触发。所以,剩下的时间,就像基本行+几个字节的RAM来保存相对值和附加值一样</p>