Реализация эффекта двоения в глазах (Implementing a Double Vision Effect)

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

Следующий код создает расплывчатый эффект "двоения". Этот эффект использовался в играх Gakuen Redux и Секретарь смерти.

Основная идея заключается в том, что вы создаете наполовину непрозрачную версию фона, а затем показываете её в случайном месте после отображения фона. Это не значит, что вызов этого эффекта, во время повествования, требует два оператора, нужен только один.

init:

    image cs2 = Image("b_city_scape_02.gif")

    transform transpa:

        alpha 0.5

    python hide:

        def gen_randmotion(count, dist, delay):

            import random

            args = [ ]

            for i in range(0, count):
                args.append(anim.State(i, None,
                                       Position(xpos=random.randrange(-dist, dist),
                                                ypos=random.randrange(-dist, dist),
                                                xanchor='left',
                                                yanchor='top',
                                                )))

            for i in range(0, count):
                for j in range(0, count):

                    if i == j:
                        continue

                    args.append(anim.Edge(i, delay, j, MoveTransition(delay)))

            return anim.SMAnimation(0, *args)

        store.randmotion = gen_randmotion(5, 5, 1.0)


init python:

    def double_vision_on(picture):

        renpy.scene()

        renpy.show(picture)

        renpy.show(picture, at_list=[transpa,randmotion], tag="blur_image")

        renpy.with_statement(dissolve)


    def double_vision_off():

        renpy.hide("blur_image")

        renpy.with_statement(dissolve)


label start:

    $ double_vision_on("cs2")

    "Показано как двоится в глазах (когда пьян)."

    $ double_vision_off()

    "Ох. Теперь я в порядке."

В вышеуказанном коде, этот оператор, который фактически производит эффект двоения во время повествования:

    $ double_vision_on("cs2")

Однако это прерывает эффект. Это равнозначно оператору hide для изображения "blur_image":

    $ double_vision_off()

    hide blur_image

Как вы могли заметить, эти функции Python используют аналогичные операторы языка Ren'Py в Python. Для получения дополнительной информации о Python и аналогах оператора Ren'Py, документации Ren'Py:

init python:

    def double_vision_on(picture):

        # renpy.scene() и renpy.show() похожи на "scene". В одиночку, renpy.show() подобен "show".

        renpy.scene()

        renpy.show(picture)

        # at_list аналогичен "at" и tag= на подобии "as".

        # Не подходит для определения изображения с тем же тегом, что и эта функция

        renpy.show(picture, at_list=[transpa,randmotion], tag="blur_image")

        # renpy.with_statement() подобен "with".

        # Я добавил это, потому что сделал плавным эффект в начале (и в конце).

        renpy.with_statement(dissolve)


    def double_vision_off():

        # renpy.hide() все равно, что "hide"

        renpy.hide("blur_image")

        renpy.with_statement(dissolve)

Источник[править | править код]

Статья "Implementing a Double Vision Effect" на английском языке


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