Пример дождя, грома и молний.

Файл для скачивания: https://yadi.sk/d/2Db9BY8RrqvCH

init python: # можно и со стандартной функцией Animation, # но просили с этой: 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) # время появления/затухания звуков fade_time = 1.0 # регистрируем каналы, чтобы звуки не прерывали друг друга channels = ["rain", "thunder1", "thunder2", "thunder3"] for i in channels: renpy.music.register_channel(i, "sfx", True) # воспроизводим звуки на своих каналах # либо на канале sound, если нужный канал не зарегистрирован def splay(name, channel=None, loop=False, fadein=fade_time, fadeout=fade_time): if not channel in channels: channel = None if channel is None: if name in channels: channel = name else: channel = "sound" fn = "sounds/" + name + ".ogg" renpy.music.play(fn, channel=channel, loop=loop, fadeout=fadeout, fadein=fadein) # постепенно останавливаем звуки или один звук, если на входе не список def sstop(channel=channels, fadeout=fade_time): if isinstance(channel, list): for i in channel: renpy.music.stop(i, fadeout=fadeout) else: renpy.music.stop(channel, fadeout=fadeout) # новое положение молний xa = renpy.random.random() def newxa(): global xa xa = renpy.random.random() renpy.restart_interaction() # функция → action SPlay = renpy.curry(splay) SStop = renpy.curry(sstop) NewXA = renpy.curry(newxa) p = Character("Свинья", color="#ffcc77", window_left_padding=200, show_side_image=Image("pig.png", align=(0.0, 1.0))) # экран для дождя и грома screen Rain: # включаем и выклюяаем дождь вместе с экраном on 'show' action SPlay("rain", loop=True) # можно остановить только дождь SStop("rain"), # тогда начавшийся гром догремит и стихнет сам on 'hide' action SStop() # псевдо-рандомные раскаты timer 4.5 repeat True action SPlay("thunder1") timer 6.5 repeat True action SPlay("thunder2") timer 15.0 repeat True action SPlay("thunder3") # картинка с молниями timer .1 repeat True action NewXA() add "light": xalign xa # дождь add "rain": alpha .15 init: # пустая картинка image none = Null(1, 1) # анимация дождя image rain = Ani("rain", 5, .1, reverse=False) # анимация молнии image lightning = Ani("lightning", 3, .025) # мерцание молнии image light: yalign 0 yanchor 0 # пусто "none" 4.5 xzoom 1.0 "lightning" .1 "none" .1 "lightning" .1 "none" 1.5 # зеркальное отражение xzoom -1.0 "lightning" .1 "none" .05 "lightning" .1 repeat # игра начинается здесь label start: scene bg with None show screen Rain with dissolve p "Кажется, дождь собирается..." pause hide screen Rain with dissolve p "Кажется, кончился." return
RSS
Нет комментариев. Ваш будет первым!
Загрузка...

Понравилась статья?

Поддержи нас, чтобы мы создавали больше полезных ресурсов!

Случайная статья