20PYTHON20
@20PYTHON20

Логика столкновения kivy python?

Участок кода на python
class birds :
    # Макет FloatLayot
    display = ObjectProperty(None)
    # Позиция птиц
    x = (-40)
    y = 800
    x_final = 700
    #Виджет Image
    bird_only = Image()

    def __init__ (self) :
        Clock.schendule_interval (self.bird_only,10)

    def bird (self) :
        self.bird_only = Image (source = 'путь к изображению',size_hint = (None,None) ,size = (60,60),pos = (self.x,self.y)
        self.display.add_widget(self.bird_only)
        # Анимация
        self.anim = Animation (x = self.x_final ,y = y ,d = 5)
        self.anim.start(self.bird_only)

Я не стал прописывать импорты а так же исключил kv разметку.
Суть такова : птица вылетает за экран ,а затем виджет удаляется ,тем самым создавая бесконечный круговорот птиц в природе .
Как можно это реализовать,перерыл уже тонны информации , документации по этой теме мало и на официальном сайте выглядит не так развернуто как хотелось бы .
Если я делаю следующим образом в класс birds добавляю функцию delete birds :
def delete_birds (self) :
   if self.x > 650 :
       self.display.remove_widget(self.bird_only)
,
то ничего не происходит ,птичка просто вылетает за экран ,для проверки я поставил точку ее остановки на середине ,и соответственно мои догадки подтвердились .Птица просто остаётся на центре затем вылетает другая и так пока программа не зависнет .
Вероятнее всего переменная x попросту не отслеживается .
Подскажите как можно исправить проблему и я был бы рад если бы хотя бы получилось найти документацию об этом .
Итоговый вариант :
class birds :
    # Макет FloatLayot
    display = ObjectProperty(None)
    # Позиция птиц
    x = (-40)
    y = 800
    x_final = 700
    #Виджет Image
    bird_only = Image()

    def __init__ (self) :
        Clock.schendule_interval (self.bird_only,10)
    
     def delete_birds (self) :
         if self.x > 650 :
             self.display.remove_widget(self.bird_only)

    def bird (self) :
        self.bird_only = Image (source = 'путь к изображению',size_hint = (None,None) ,size = (60,60),pos = (self.x,self.y)
        self.display.add_widget(self.bird_only)
        # Анимация
        self.anim = Animation (x = self.x_final ,y = y ,d = 5)
        self.anim.start(self.bird_only)
        self.delete_birds()
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Ну для начала, зачем удалять и пересоздавать отдельных птиц, если можно просто "телепортировать" их к другому краю экрана?
Кроме того, если я верно понял, у тебя delete_birds() отработает сразу, не дожидаясь конца анимации, так как метод start() не выполняет анимацию - он только планирует её постепенное выполнение в ходе дальнейшей работы окна. Используй событие on_complete в твоём объекте Animation.
Подробности, как всегда, в документации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект