Объявление многокадровой анимации одной короткой командой

Материал из Ren'Py Wiki
Перейти к навигации Перейти к поиску

Если вам лениво прописывать каждый кадр при создании многокадровой анимации, то это можно делать с помощью одной короткой функции Ani, код которой вы найдете по ссылке ниже. По умолчанию включено проигрывание анимации в обратную сторону. и можно задавать первую цифру. Т.е. если есть 5 кадров, начиная с img0 и заканчивая img4, то «image ani = Ani("img", 5, 1.0, start=0)» вернет зацикленную ежесекундную смену кадров 0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4... и т.д. Отключается параметром reverse=False.

Кстати, можно добавлять эффекты для смены кадров.

# автоматическое объявление анимации
init python:
    """
    описание функции Ani:
    автоматическое объявление картинки с анимацией,
    например есть кадры "images/neko%s.png",
    где %s - числа от 1 до 5, тогда объявляем анимацию так:
    image neko = Ani("neko", 5, 0.5, reverse = False)
    где:
    img_name - имя файла без номера (например, "neko")
    frames - количество кадров
    delay - пауза между кадрами в секундах
    loop - зациклить анимацию (по умолчанию включено)
    reverse - нужно ли проигрывание анимации в обратную сторону
    effect - эффект для смены кадров
    start - с какой цифры начинать отсчет кадров
    ext - расширение файлов (по умолчанию png)
    """
    def Ani(img_name, frames, delay=.1, loop=True, reverse=True, effect=None, start=1, ext="png", **properties):
        args = []
        for i in range(start, start + frames):
            args.append(renpy.display.im.image(img_name + str(i) + "." + ext))
            if reverse or loop or (i < start + frames - 1):
                args.append(delay)
                args.append(effect)
        if reverse: # обратная анимация, если нужна
            for i in range(start + frames - 2, start, -1):
                args.append(renpy.display.im.image(img_name + str(i) + "." + ext))
                if loop or (i > start + 1):
                    args.append(delay)
                    args.append(effect)
        return anim.TransitionAnimation(*args, **properties)

init:
    # эффект dissolve в полсекунды с учетом прозрачности
    $ dd = Dissolve(.5, alpha=True)
    # 5 кадров, смена раз в полсекунды и эффектом для смены кадров
    # по умолчанию зациклена и с обратным ходом
    image neko = Ani("neko", 5, .5, effect=dd)

label start:
    show expression "bg_room.jpg"
    show neko
    pause
    return

На главную страницу Книга рецептов Энциклопедии Ren'Py Renpy для чайников Вернуться к началу статьи