気の利いた Kivy フレームワークを使用して、Android 用のゲームをプログラムしています。指定されたコード (描画に使用) を 1 秒間に 60 回実行するクロック コールバックを作成しようとしています。
何らかの理由で、Kivy クロック イベント内に描画したものが画面に描画されません。可能なすべての変数を排除するために、次のサンプル コードを使用しました。
import kivy
kivy.require('1.0.6')
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Color, Ellipse
class MyPaintWidget(Widget):
def on_touch_down(self, touch):
with self.canvas:
Color(1, 1, 0)
d = 30.
Ellipse(pos=(touch.x - d/2, touch.y - d/2), size=(d, d))
class MyPaintApp(App):
def build(self):
return MyPaintWidget()
if __name__ == '__main__':
MyPaintApp().run()
これは問題なく動作します。画面をクリックすると、そこに黄色の円が表示されます。ただし、次のように変更すると:
import kivy
kivy.require('1.0.6')
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Color, Ellipse
from kivy.clock import Clock
class MyPaintWidget(Widget):
def update(self, t):
with self.canvas:
Color(1, 1, 0)
d = 30.
Ellipse(pos=(200 - d/2, 200 - d/2), size=(d, d))
class MyPaintApp(App):
def build(self):
m = MyPaintWidget()
Clock.schedule_interval(m.update, 1.)
return m
if __name__ == '__main__':
MyPaintApp().run()
画面には何も描画されません。なんで?編集:クリックしたときにのみ画面に描画されることがわかりました。まだ役に立ちません - ゲームのイベント ループにこれを使用する必要があります。Kivy 1.4.0 (2 番目に新しい) と Ubuntu を使用しています。これは、Android でも意図したとおりに機能しません。