Как сделать анимацию перед установкой фона в Kivy - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь сделать так, чтобы при запуске он должен сначала запустить простую анимацию, а затем изменить ее на нужный фон. Бег на мяте Таре. Общая идея заключается в том, чтобы быть приложением со сменными изображениями на фоне. У него есть RootPane, MainPane и InitPane, который на самом деле является ScreenManager, а последними являются экраны, на которые он должен измениться.

import kivy
from kivy.animation import Animation
from kivy.app import App
from kivy.clock import Clock
from kivy.core.image import Image as CoreImage
from kivy.graphics import Color, Rectangle
from kivy.properties import (NumericProperty, ObjectProperty,
                             ReferenceListProperty)
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.image import Image
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.vector import Vector
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition


class LogoAnimation(Widget):
    def RunLogoAnimation():
        image_animate += Animation(x = self.center_x, y = self.center_y, image_num=i, duration=(0.10 * i))
    pass


class InitialScreen(Widget):
    layout = AnchorLayout( anchor_x='right', anchor_y='bottom' )
    Widget.size(880, 650)
    Widget.size_hint = (None, None)
    anim = Animation(x=100, y=100)
    anim.start(LogoAnimation)
    def draw_background(self, *args):
        widget.canvas.before.clear()
        with widget.canvas.before:
            Color(.4, .4, .4, 1)
            i = 1
            texture = CoreImage(("image%d.png") % i).texture
            texture.wrap = 'repeat'
            nx = float(widget.width) / texture.width
            ny = float(widget.height) / texture.height
            Rectangle(pos=widget.pos, size=widget.size, texture=texture,
                    tex_coords=(0, 0, nx, 0, nx, ny, 0, ny))


class App(App):
    def build(self):
        pane1 = InitialScreen()
        return pane1


if __name__ == '__main__':
    App().run()

Здесь следует мой файл .kv, но я полагаю, что ошибка в основном из-за какого-то просчитанного решения вокруг строк, которое объявляет размер виджета.

#:kivy 1.0.9

<LogoAnimation>:
    image_num: 0
    source: "animated%d.png" % int(self.image_num)

<RootScreen>:
    InitPane:
    MainPane:

<InitPane>:
    name: "init"
    image_num: 1
    canvas:
        Rectangle:
                pos: self.pos
                size: self.size
                source: 'image%d.png' % int(self.image_num)
             <MainPane>:
    name: "mpane"
    image_num: 1
    canvas:
        Rectangle:
                pos: self.pos
                size: self.size
                source: 'image%d.png' % int(self.image_num)
...