今度は文字ですよ。
予想はしていたのですが、描画領域に文字を描画する際もやっぱりラベルオブジェクトを生成する形で実現しています。
…のですが、label オブジェクトは他の描画オブジェクトとは様相が異なります。
生成されたオブジェクトを print すると
kivy.uix.label.Label object
と出ており、ellipse 等の kivy.graphics.vertex_instructions 系統とは別物のようです。
…と言うことは、開放の仕方も異なります。
で、書いてみたコードはこちら
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.clock import Clock
from kivy.uix.label import Label
class BtRev(Button):
def on_press(self):
self.parent.Rev()
class BoxMain(BoxLayout):
orientation='vertical'
def __init__(self,**kwargs):
super(BoxMain,self).__init__(**kwargs)
self.speed = 0.1
self.text_x = 0.0
self.list_la = []
self.boxDraw = BoxLayout(size_hint_y=4)
self.add_widget(self.boxDraw)
self.b1 = BtRev(text='Rev',size_hint_y=1)
self.add_widget(self.b1)
def Rev(self):
self.speed = self.speed * -1.0
def update(self,dt):
with self.canvas.before:
w = self.boxDraw.size[0]
h = self.boxDraw.size[1]
x = self.text_x * w - w/20.0
y = self.boxDraw.top-h/2.0
self.text_x = self.text_x + self.speed
if self.text_x > 1.0:
self.text_x = 0.0
elif self.text_x < 0.0:
self.text_x = 1.0
for old in self.list_la:
self.canvas.before.children.remove(old.canvas)
self.list_la.remove(old)
f_size =w/20
if f_size < 10:
f_size = 10
self.list_la.append(Label(pos=(x,y),text='TEST',color=(1,1,1,1),font_size=f_size))
class BoundText(App):
def build(self):
bxmain = BoxMain()
Clock.schedule_interval(bxmain.update, 1.0/12.0)
return bxmain
if __name__ == "__main__":
BoundText().run()
…うん、kivy の描画系は名前の付け方を変えてほしい。
というか、OS間の互換性を取るのが難しいのかもしれないけど、描画バッファに直接描画して、描画しっぱなしの所謂普通の描画関数にしてほしい。
古い考え方で書くと、画面描画をすべてスプライトで行っているような現状で、流石にゲームを作るのは無理なのでは無いかと感じますね。
いや、調べたら別の方法があるかもしれませんが。
0 件のコメント:
コメントを投稿