Kivy:做定时事件的更好方法(骰子滚动动画)

时间:2016-02-03 07:59:10

标签: python kivy dice

我正在编写一个yahtzee克隆来自学Kivy(我对Python和编程一般来说还很新),而且我在弄清楚如何最好地制作掷骰子动画时遇到了一些麻烦。这段代码按预期工作,但我觉得我在概念上遗漏了一些东西。是否有一种较少参与或更清洁的方式让Clock事件在一段时间内发生?

这就是我目前所拥有的:

父布局包含5个骰子作为子窗口小部件。用户单击按钮以使用此方法将它们全部滚动:

def roll_all_dice(self):
    for dice in self.children:
        Clock.schedule_interval(dice.roll, .1)
        Clock.schedule_once(dice.roll_animation_callback, .5)

如果我理解正确的话,每隔.1s调度一次滚动,然后.5s后调用roll_animation_callback,停止事件。

以下是相关的骰子方法:

def roll(self, *args):
    '''changes the number of the die and updates the image'''
    if self.state != "down":
        self.number = randint(1,6)
        self.source = self.get_image()

def get_image(self):
    '''returns image path for each of the die's sides'''
    if self.state == "down":
        return "images/down_state/dice" + str(self.number) + ".png"
    else:
       return "images/up_state/dice" + str(self.number) + ".png"

def roll_animation_callback(self, *args):
    '''turns off the dice rolling animation event'''
    Clock.unschedule(self.roll)

1 个答案:

答案 0 :(得分:1)

这看起来很好,使用时钟就像这样是正常的。