Создание комнат Галереи (Gallery)
Галерея

Как бонус, в визуальных новеллах бывает комната, где расположены примечательный спрайты/фоны/cg-арты. Именуют её «Галерея». Она может состоять как из одной комнаты, так и из бесконечного множества. Комнаты могут быть все совершенно разные. Изначально, изображения в галереи делают закрытой, а открывать их нужно по ходу прохождения сюжета, при выполнении определённых условий.

Для создания галереи нам необходимо:
1. Спрайты/Фоны/CG которые вы и хотите поместить в галерею.
2. Фон для галереи.
3. Уменьшенная версия Спрайтов/Фонов/CG, то бишь превью. Желательно с соотношением вашей вн, но гораздо меньше по разрешению. В примерах новелла разрешением 800х600, превью я сделал 200х150.
4. Изображение, которое будет находится на месте ещё закрытых спрайтов/фонов/cg. Разрешение должно быть то же, что и у превью.

Для начала, чтобы было удобней работать, сделаем для галереи отдельный скрипт.
1.Находясь в редакторе выбрать в верхнем меню вкладку File (Файл)
2.Нажать на:
2.1. Для Editra - New Tab (Ctrl + N)
2.2. Для jEdit - Создать (N)
2.3. Для блокнота - Создать (Ctrl + N)

И вот здесь мы уже и будем создавать галерею. Не забудьте после сохранить скрипт - (название.rpy). Дабы не путаться можно назвать gallery.rpy. Расширение .rpy обязательно вписать вручную.

Для начала создадим объект класса "Gallery "

Код
init python:
    g = Gallery()
    g.transition = dissolve #...Указываем эффект перехода к изображению. Можно применять и иные эффекты.

Теперь ниже создаем первую комнату. Зарегистрируем в ней, к примеру, 6 спрайтов, с указанным для них фоном.
Код
screen gallery:
    python:
        g.button("sp1") #...регистрируем кнопку для первого спрайта. "sp1" - регистрируемое название кнопки.
        if persistent.sp1=="yes": #....Создаем условие, если переменная с первым спрайтов имеет значение [i]yes[/i], тогда...
            g.image("galer/sp/fong.png", "galer/sp/sp1.png") #...тогда по клику на кнопке - переход к изображению...
                    #...."galer/sp/fong.png"- фон, на котором будет выводится спрайт
                    #...."galer/sp/sp1.png" - путь к самому спрайту/фону/CG

........#Так же делаем и остальные кнопки
        g.button("sp2")
        if persistent.sp2=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp2.png")

        g.button("sp3")
        if persistent.sp3=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp3.png")

        g.button("sp4")
        if persistent.sp4=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp4.png")

        g.button("sp5")
        if persistent.sp5=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp5.png")

        g.button("sp6")
        if persistent.sp6=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp6.png")

#P.S. кнопок можно создавать сколь угодно, и называть их кой угодно.  
#P.S.S. Фон для спрайта должен быть того же разрешения, что и вн.

#После того, как мы зарегистрировали кнопки, необходимо оформить сам screen.

        tag main_menu #...Если не вписать данную строку, то тогда будет невозможным выход из галереи в главное меню.
#Если tag main_menu работать не будет, переименуйте в tag menu

        add "galer/background_g.png" - добавляем фон для комнаты.

        textbutton "Главное меню" action ShowMenu("main_menu") xalign 0.1 yalign 0.99
#Создаём кнопку "Главное меню", вешаем действие - переход к main_menu, указываем расположение кнопки координатами с #плавающей точкой.

#Ниже будут описано создание превью.
#P.S.S. Превью можно скооперировать, засунув в одну сетку - grid. Либо же для каждой указать координаты с плавающей точкой. #Я покажу второй метод.

        add g.make_button("sp1", "galer/sp/prev/sp1o.png", locked="galer/lock.png", xalign=0.1, yalign=0.25)
#Добавляем кнопку "sp1"
#"galer/sp/prev/sp1o.png" - указываем изображение, которое будет превьюшкой для данного спрайта
# locked="galer/lock.png" - если же спрайт/фон/CG ещё не были открыты, для этого случая указываем изображение, где они #закрыты
#Далее, просто указываем координаты с плавающей точкой для данной кнопки-превью.
#То же проделываем и для остальных превью.

        add g.make_button("sp2", "galer/sp/prev/sp2o.png", locked="galer/lock.png", xalign=0.5, yalign=0.25)
        add g.make_button("sp3", "galer/sp/prev/sp3o.png", locked="galer/lock.png", xalign=0.9, yalign=0.25)
        add g.make_button("sp4", "galer/sp/prev/sp4o.png", locked="galer/lock.png", xalign=0.1, yalign=0.65)
        add g.make_button("sp4", "galer/sp/prev/sp4o.png", locked="galer/lock.png", xalign=0.1, yalign=0.65)
        add g.make_button("sp4", "galer/sp/prev/sp4o.png", locked="galer/lock.png", xalign=0.1, yalign=0.65)

Комната создана, теперь сделаем, чтобы в главном меню была кнопка перехода к галереи.
Открываем screens.rpy, опускаемся до screen main_menu.
Если у вас стандартное меню с кнопками, то где-нибудь между О игре и Выход вписываем следующее
Код
textbutton _("Галерея") action ShowMenu("gallery")

Создаём кнопку, назвав её Галерея, и повесив действие по клику - переход к комнате gallery

Если у вас меню с ImageMap, тогда пишем следующее.
Код
hotspot (0, 0, 0, 0) action ShowMenu("gallery")

Указываем координаты для области и вешаем действие - переход к комнате - gallery.



Комната готова, но все изображения закрыты. Для открытия вписываем название кнопки и приписываем ей атрибут - yes
К примеру, в начале игры, при появления первого спрайта в игре, откроем его в галереи.
Код
label start:
    scene back
    show sprite2
    $ persistent.sp2 = "yes" #...Кнопка "sp2" в Галереи теперь будет активна, ибо её условие выполнено - "sp2" с атрибутом "yes"
    "~Реплика~"

По такому примеру можно в любом месте активировать и остальные кнопки, вписав их наименование, вместо sp2.
P.S.S.S. По данному методу создания галереи, превью будет кликабельно, то бишь, открыто изображение сразу, после его активации, необходимо лишь в главном меню войти в галерею.

P.S.S.S.S. Здесь используются постоянные данные, если вы хотите сбросить все "открытые" изображение, то в лаунчере, когда проект выбран - нажмите на "Очистить постоянные данные".


Аналогичным образом можно создать много таких комнат. А для навигации между ними нужно повесить кнопки.  
Вот полный кусок кода галереи состоящей из 4 комнат. Две комнаты со спрайтами и две с артами. В главном меню и в label уже всё описано.
Код
init python:
    g = Gallery()
    g.transition = dissolve
screen gallery: #...создание комнаты gallery c 6 спрайтами.
    python:
        g.button("sp1")
        if persistent.sp1=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp1.png") #Правильная последовательность - сначала фон, после спрайт.

        g.button("sp2")
        if persistent.sp2=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp2.png")

        g.button("sp3")
        if persistent.sp3=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp3.png")

        g.button("sp4")
        if persistent.sp4=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp4.png")

        g.button("sp5")
        if persistent.sp5=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp5.png")

        g.button("sp6")
        if persistent.sp6=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp6.png")

    tag main_menu #....Или tag menu
    add "galer/background_g.png"
    textbutton "Главное меню" action ShowMenu("main_menu") xalign 0.1 yalign 0.99 #Создаем кнопку возвращения в главное меню.
    textbutton "Дальше" action ShowMenu("gallery2" xalign 0.9 yalign 0.99  
#Кнопка навигации, для перехода к следующей комнате со спрайтами.

    textbutton "Арты" action ShowMenu("art1") xalign 0.5 yalign 0.99  
#Кнопка навигации, для перехода к комнате с артами.

    add g.make_button("sp1", "galer/sp/prev/sp1o.png", locked="galer/lock.png", xalign=0.1, yalign=0.25)
    add g.make_button("sp2", "galer/sp/prev/sp2o.png", locked="galer/lock.png", xalign=0.5, yalign=0.25)
    add g.make_button("sp3", "galer/sp/prev/sp3o.png", locked="galer/lock.png", xalign=0.9, yalign=0.25)
    add g.make_button("sp4", "galer/sp/prev/sp4o.png", locked="galer/lock.png", xalign=0.1, yalign=0.65)
    add g.make_button("sp5", "galer/sp/prev/sp5o.png", locked="galer/lock.png", xalign=0.5, yalign=0.65)
    add g.make_button("sp6", "galer/sp/prev/sp6o.png", locked="galer/lock.png", xalign=0.9, yalign=0.65)

screen gallery2: #создание второй комнаты с 4 спрайтами.
    python:
        g.button("sp7")
        if persistent.sp7=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp7.png")

        g.button("sp8")
        if persistent.sp8=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp8.png")

        g.button("sp9")
        if persistent.sp9=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp9.png")

        g.button("sp10");
        if persistent.sp10=="yes":
            g.image("galer/sp/fong.png", "galer/sp/sp10.png")

    tag main_menu
    add "galer/background_g.png"
    add g.make_button("sp7", "galer/sp/prev/sp7o.png", locked="galer/lock.png", xalign=0.3, yalign=0.25)
    add g.make_button("sp8", "galer/sp/prev/sp8o.png", locked="galer/lock.png", xalign=0.7, yalign=0.25)
    add g.make_button("sp9", "galer/sp/prev/sp9o.png", locked="galer/lock.png", xalign=0.3, yalign=0.65)
    add g.make_button("sp10", "galer/sp/prev/sp10o.png", locked="galer/lock.png", xalign=0.7, yalign=0.65)
    textbutton "Главное меню" action ShowMenu("main_menu") xalign 0.1 yalign 0.99
    textbutton "Назад" action ShowMenu("gallery") xalign 0.9 yalign 0.99
    textbutton "Арты" action ShowMenu("art1") xalign 0.5 yalign 0.99

screen art1: #Создание комнаты с 6 артами.
    python:
        g.button("ar1")
        if persistent.ar1=="yes":
            g.image("galer/cg/izo1.png") #....Указано одно изображение, ибо фон для артов не нужен

        g.button("ar2")
        if persistent.ar2=="yes":
            g.image("galer/cg/izo2.png")

        g.button("ar3")
        if persistent.ar3=="yes":
            g.image("galer/cg/izo3.png")

        g.button("ar4")
        if persistent.ar4=="yes":
            g.image("galer/cg/izo4.png")

        g.button("ar5")
        if persistent.ar5=="yes":
            g.image("galer/cg/izo5.png")

        g.button("ar6")
        if persistent.ar6=="yes":
            g.image("galer/cg/izo6.png")

    tag main_menu

    add "galer/background_g.png" #Фон для данной комнаты

    add g.make_button("ar1", "galer/cg/prev/izo1o.png", locked="galer/lock.png", xalign=0.1, yalign=0.25)
    add g.make_button("ar2", "galer/cg/prev/izo2o.png", locked="galer/lock.png", xalign=0.5, yalign=0.25)
    add g.make_button("ar3", "galer/cg/prev/izo3o.png", locked="galer/lock.png", xalign=0.9, yalign=0.25)
    add g.make_button("ar4", "galer/cg/prev/izo4o.png", locked="galer/lock.png", xalign=0.1, yalign=0.65)
    add g.make_button("ar5", "galer/cg/prev/izo5o.png", locked="galer/lock.png", xalign=0.5, yalign=0.65)
    add g.make_button("ar6", "galer/cg/prev/izo6o.png", locked="galer/lock.png", xalign=0.9, yalign=0.65)

#Кнопки для навигации
    textbutton "Главное меню" action ShowMenu("main_menu") xalign 0.1 yalign 0.99
    textbutton "Дальше" action ShowMenu("art2") xalign 0.9 yalign 0.99
    textbutton "Спрайты" action ShowMenu("gallery") xalign 0.5 yalign 0.99

screen art2: #Создание комнаты с 4-мя артами.
    python:
        g.button("ar7")
        if persistent.ar7=="yes":
            g.image("galer/cg/izo7.png")

        g.button("ar8")
        if persistent.ar8=="yes":
            g.image("galer/cg/izo8.png")

        g.button("ar9")
        if persistent.ar9=="yes":
            g.image("galer/cg/izo9.png")

        g.button("ar10")
        if persistent.ar10=="yes":
            g.image("galer/cg/izo10.png")  

    tag main_menu

    add "galer/background_g.png"

    add g.make_button("ar7", "galer/cg/prev/izo7o.png", locked="galer/lock.png", xalign=0.3, yalign=0.25)
    add g.make_button("ar8", "galer/cg/prev/izo8o.png", locked="galer/lock.png", xalign=0.7, yalign=0.25)
    add g.make_button("ar9", "galer/cg/prev/izo9o.png", locked="galer/lock.png", xalign=0.3, yalign=0.65)
    add g.make_button("ar10", "galer/cg/prev/izo10o.png", locked="galer/lock.png", xalign=0.7, yalign=0.65)

    textbutton "Главное меню" action ShowMenu("main_menu") xalign 0.1 yalign 0.99
    textbutton "Назад" action ShowMenu("art1") xalign 0.9 yalign 0.99
    textbutton "Спрайты" action ShowMenu("gallery") xalign 0.5 yalign 0.99  


Скачать gallery.rpy без комментариев.





На этом всё не ограничивается. Делайте свои необычные и занимательные галереи.

©Программист Celestial Novels

Автор материала: Sota
Материал от пользователя сайта.



Ren'Py 05.10.14 5533 Sota мануал, галерея, Gallery, Комнаты, RenPy, ренпай 5.0/9

Комментарии (5):
3
1 Химаря:3   (05.10.14 20:26)
2
Отличные статьи! Спасибо большое! funny

0
2 Setgtyan   (19.03.15 11:28)
4781
Как избавиться от полосок по бокам картинок?

0
3 Setgtyan   (23.03.15 09:39)
4781
Всё, нашёл. В g.make_button вписывать hover_border"" и idle_border"".

0
4 Sota   (24.05.15 11:40)
132
Есть ещё способ, убрать у них фон:
background=None

0
5 Ksasagan   (17.08.16 15:32)
39375
У меня постоянно выходит ошибка, не знаю, что делать... Ошибка "Gallery is not a screen or label"

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]