2016-02-03 6 views
1

Я пишу клон 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) 

ответ

1

Это кажется прекрасным, используя часы, как это нормально.

Смежные вопросы