我正在使用漂亮的Kivy框架为Android编写游戏。 我正在尝试创建一个时钟回调来运行指定的一段代码(用于绘制),每秒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(最新的第二个)和Ubuntu。这也无法在Android上正常工作。
答案 0 :(得分:1)
我可以运行你的代码 - 我做了一些改变,所以你可以看到它确实每秒被调用。它现在打印出D的值,它每秒都会变化,并且大黄色圆圈每秒都会增长。我希望这会对你有所帮助。
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):
d = 10
def update(self, t):
print("D is", self.d)
with self.canvas:
Color(1, 1, 0)
self.d = self.d + 1
Ellipse(pos=(200 - self.d/2, 200 - self.d/2), size=(self.d, self.d))
class MyPaintApp(App):
def build(self):
m = MyPaintWidget()
Clock.schedule_interval(m.update, 1.)
return m
if __name__ == '__main__':
MyPaintApp().run()