Я пишу клон yahtzee, чтобы научить себя Kivy (я все еще очень новичок в Python и программировании вообще), и у меня есть небольшая проблема с вычислением как наилучшим образом анимировать бросок кубиков. Этот код работает по назначению, но я чувствую, что я что-то теряю концептуально. Существует ли менее задействованный или более чистый способ иметь событие Clock в течение определенного периода времени?Kivy: лучший способ делать приуроченные события (анимация прокатки кубиков)
Это то, что я в настоящее время:
Родитель расположение имеет 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, который останавливает события.
Вот соответствующие методы Dice:
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)