Выдача часов Kivy (что-то удваивается каждый раз) - PullRequest
0 голосов
/ 08 июня 2018

Так что моя проблема в том, что всякий раз, когда я создаю новую игру методом create_game (), происходит что-то странное, и все начинает двигаться в 2 раза быстрее, я думаю, что это связано с проблемой синхронизации, но я не уверен.Мой вопрос: что я могу сделать, чтобы он работал в нормальном темпе?Вот код:

def create_game(self):
    for i in range(1,11):
        for j in range(15):
            brick = Brick(pos = [self.width/15*j,self.height - self.height/30*i - self.height/6], size_hint = [1/15,1/30] )
            a = random.randint(1,3)
            if(a!=3):
                self.brick_container.add_widget(brick)
    ball = Ball(pos = (self.paddle.center_x, self.paddle.height + 1), size_hint = [None,None], size = [self.width/50,self.width/50])
    self.ball_container.add_widget(ball)
    self.game_on_pause = True
    self.update()


def serve_ball(self):
    self.ball_container.children[0].velocity = Vector(3,3)

if(len(self.ball_container.children) == 0):
        self.level += 1
        self.brick_container.clear_widgets()
        self.ball_container.clear_widgets()
        self.bonus_container.clear_widgets()
        Clock.unschedule(self.update)
        self.create_game()


    Clock.schedule_once(self.update, 1.0 / 60.0)

1 Ответ

0 голосов
/ 08 июня 2018

Сохраните Clock.schedule_once в переменную, событие и замените Clock.unschedule(self.update) на self.event.cancel()

if(len(self.ball_container.children) == 0):
        ...
        self.bonus_container.clear_widgets()
        self.event.cancel()
        self.create_game()

    self.event = Clock.schedule_once(self.update, 1.0 / 60.0)

Примечание

Альтернативой является использование событий триггера .

Каждый раз, когда вы вызываете триггер (), он будет планировать один вызов вашего обратного вызова.Если это уже было запланировано, оно не будет перенесено.

self.trigger = Clock.create_trigger(my_callback, 1.0 / 60.0)
self.trigger()    # schedule it
self.trigger.cancel()    # cancel / unschedule it
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...