Рандомные мерцающие звезды внутри Displayable

Чтобы использовать функцию, нужно закинуть файл blinkinstars.rpy в папку game проекта. В директории images должны быть star.png и bg_sky.jpg (либо свои файлы - всё настраивается). Можно указать регион, в котором появятся звезды (левый верхний и правый нижний углы), также можно указать количество звезд. Полученный файл можно использовать и в скрипте. Например, так: scene mmbg


# код файла blinkinstars.rpy
init -2:
    # мерцание
    transform sblink(t=1.0, frm=.0, z=1.0):
        alpha frm*.5+.5 zoom z rotate renpy.random.randint(0, 360)
        linear t*.5*(1.0-frm) alpha 1.0
        linear t*.5 alpha .5
        linear t*.5*frm alpha frm*.5+.5
        repeat

init -1 python:
    # автоматическое объявление
    config.automatic_images_minimum_components = 1
    config.automatic_images = [' ', '_', '/']
    config.automatic_images_strip = ["images"]

    # в папке images должна лежать картинка star.png
    # функция, приклеивающая к фону несколько мерцающих звездочек
    def BlinkinStars(star_count=20, bg = "black", region=None, **properties):
        sw, sh = (config.screen_width, config.screen_height)
        if region is None:
            region = (0, 0, sw, sh)
        # регион, в пределах которого будут размещены звезды
        # (можно не задавать, тогда на весь экран)
        r0x, r0y, r1x, r1y = region
        # при необходимости добавляем фон
        if bg is None:
            data = [(sw, sh)]
        else:
            data = [(sw, sh), (0, 0), bg]            
        # мерцающие (несинхронно!) звезды
        for i in range(star_count):
            frm = renpy.random.random() # начало мерцания
            stm = .5+renpy.random.random()*1.5 # время мерцания (0.5..2)
            # позиция
            y = renpy.random.randint(r0y, r1y)
            x = renpy.random.randint(r0x, r1x)
            szoom = renpy.random.random() # размер звездочки (0..1)
            # добавляем звездочку
            iname = "tmpimg" + str(i)
            renpy.image(iname, At("star", sblink(stm, frm, szoom)))
            data.extend([(x, y), iname])
        return LiveComposite(*data)

init:
    image mmbg = BlinkinStars(30, "bg sky")
    $ style.mm_root.background = "mmbg"
    $ style.gm_root.background = "mmbg"

Комментарии