Динамический фон

Работая над новеллой «Сателлит», я столкнулся с такой проблемой. У меня был динамический фон – плывущие по небу облака и движущийся немного с другой скоростью пейзаж. Всё было замечательно, пока по экрану не начали двигаться спрайты. По завершении движения или при уничтожении спрайта Renpy перерисовывает фон. А значит, анимация запускается заново. Происходит рывок. Допустим тучки прошли только треть пути, и тут их возвращают на исходную. Выглядит это очень некрасиво. Но чтобы фон не перерисовывался, его можно засунуть в экран, который будет выводиться прямо поверх фона, но под спрайтами. Как это сделать, видно из кода ниже.


init -3 python:
    # окно игры в центре экрана
    import os
    os.environ['SDL_VIDEO_CENTERED'] = '1'
    # автоматическое объявление изображений
    config.automatic_images_minimum_components = 1
    config.automatic_images = [' ', '_', '/']
    config.automatic_images_strip = ['images']
init:
    # трансформация для перемещения фона
    transform _moveleft(delay=7.5):
        xalign 1.0
        linear delay xalign 0.0
        repeat

# экран с фоном
screen scr_bg:
    add "sky" at _moveleft(15)
    add "solt" at _moveleft

label start:
    scene black
    # показать фон
    show screen scr_bg(_layer="master")
    with dissolve
    # движение спрайта
    show mtt at truecenter with easeinright
    pause .25
    hide mtt with easeoutleft
    # спрятать фон
    $ renpy.hide_screen("scr_bg", layer="master")
    with dissolve
    return

Комментарии