Если вам лениво прописывать каждый кадр при создании многокадровой анимации, то это можно делать с помощью одной короткой функции 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: # эффект dissolve в полсекунды с учетом прозрачности diss = Dissolve(.5, alpha=True) """ описание функции 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 - расширение, если оно отлично от Null, то работаем с файлами, а не с displayable (уже объявленными или даже измененными изображениями) так же можно добавлять любые стандартные для изображений параметры, типа масштабирования или прозрачности: image neko = Ani("neko", 5, 0.5, zoom=2.0, alpha=0.75) """ def Ani(img_name, frames, delay=.1, loop=True, reverse=False, effect=diss, start=1, ext="png", **properties): if img_name: args = [] # перебираем все кадры анимации for i in range(start, start + frames): if ext is None: args.append(renpy.easy.displayable(img_name + str(i))) else: 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): if ext is None: args.append(renpy.easy.displayable(img_name + str(i))) else: 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) return None init: # 5 кадров, смена раз в полсекунды и эффектом для смены кадров # по умолчанию зациклена и с обратным ходом image neko = Ani("neko", 5, .5, True, True) label start: scene expression "bg_room.jpg" show neko pause return
как поставить анимацию на паузу?
ОтветитьУдалитьникак.
Удалитьно можно вывести вместо анимации нужный кадр, один, статичный.
Полностью скопировал код. Не работает. Заменил только имя файла. Функция компилируется правильно, а вот при объявлении в init image neko = Ani("neko", 5, .5, effect=dd) выдаёт вот такое:
ОтветитьУдалитьI'm sorry, but an uncaught exception occurred.
While running game code:
File "game/script.rpy", line 38, in script
image neko = Ani("male", 3, .5, effect=dd)
File "game/script.rpy", line 38, in
image neko = Ani("male", 3, .5, effect=dd)
File "game/script.rpy", line 29, in Ani
return anim.TransitionAnimation(*args, **properties)
Exception: Not a displayable: 0.5
-- Full Traceback ------------------------------------------------------------
Full traceback:
File "game/script.rpy", line 38, in script
image neko = Ani("male", 3, .5, effect=dd)
File "E:\Downloads\renpy-6.99.14-sdk\renpy\ast.py", line 942, in execute
img = renpy.python.py_eval_bytecode(self.code.bytecode)
File "E:\Downloads\renpy-6.99.14-sdk\renpy\python.py", line 1828, in py_eval_bytecode
return eval(bytecode, globals, locals)
File "game/script.rpy", line 38, in
image neko = Ani("male", 3, .5, effect=dd)
File "game/script.rpy", line 29, in Ani
return anim.TransitionAnimation(*args, **properties)
File "E:\Downloads\renpy-6.99.14-sdk\renpy\display\anim.py", line 424, in __init__
images.append(renpy.easy.displayable(arg))
File "E:\Downloads\renpy-6.99.14-sdk\renpy\easy.py", line 108, in displayable
raise Exception("Not a displayable: %r" % (d,))
Exception: Not a displayable: 0.5
проблема с вашей стороны. я проверил свой код и на новом ренпае. по-прежнему всё работает.
УдалитьНе могу добавить эффект, хоть убей
ОтветитьУдалитьОтлично все работает, автору респект!
ОтветитьУдалить