我正在使用Kivy编写游戏代码。我有一个Screen类,我在其中放置动画代码。这不是一般的游戏,它更像是几个屏幕,每个屏幕都有自己的动画,按钮命令可以来回切换到不同的屏幕。
它工作正常,但是当我制作更多这样的类并将其全部放在ScreenManager中时,动画会被随机白屏中断。
class Pas(Screen):
def __init__(self, **kwargs):
super(Pas, self).__init__(**kwargs)
Clock.schedule_interval(self.update, 1 / 60.0)
self.ani_speed_init = 15
self.ani_speed = self.ani_speed_init
self.ani = glob.glob("img/pas_ani*.png")
self.ani.sort()
self.ani_pos = 0
self.ani_max = len(self.ani)-1
self.img = self.ani[0]
self.update(1)
back = Button(
background_normal=('img/back-icon.png'),
background_down=('img/back-icon.png'),
pos=(380, 420))
self.add_widget(back)
def callback(instance):
sm.current = 'game'
back.bind(on_press=callback)
def update(self, dt):
self.ani_speed -= 1
if self.ani_speed == 0:
self.img = self.ani[self.ani_pos]
self.ani_speed = self.ani_speed_init
if self.ani_pos == self.ani_max:
self.ani_pos = 0
else:
self.ani_pos += 1
with self.canvas:
image = Image(source=self.img, pos=(0, 0), size=(320, 480))
我做错了什么?我也接受了不同方式的想法。
答案 0 :(得分:1)
如果您想为屏幕使用Screen和ScreenManager,最好使用他们定义和使用的过渡系统,以便定义您自己的过渡并应用它们。如果你想要更多的控制,我会建议你骑上Screen和ScreenManager,然后只使用Widgets来控制整个绘图/定位过程。
此外,Clock.schedule_interval(self.update,0)等同于您正在进行的调用,每帧都会调用动画,您可以使用dt来管理动画进度。
此外,kivy可以管理GIF,以及图像的zip存档直接进行动画制作(对于动画png很有用),你可以让kivy以这种方式管理整个动画过程。