Пользователи · Новые посты · Правила форума · Поиск по форуму · · · Регистрация
Страница 1 из 11
Форум о визуальных новеллах » Для разработчиков » Ren'Py » Музыка в меню
Музыка в меню

Pikener
Дата: Понедельник, 20 Марта 2017, 17:28 | Сообщение # 1
Пользователь
Сообщений: 7
Награды: 0
Репутация: 0
Замечания: 0%
Подскажите, пожалуйста, как сделать так, чтобы при вызове меню во время игры, музыка ставилась бы на паузу. Или название игры, где подобная функция реализована.

dmit
Дата: Понедельник, 20 Марта 2017, 18:31 | Сообщение # 2
Проверенный
Сообщений: 102
Награды: 0
Репутация: 15
Замечания: 0%
http://renpyfordummies.blogspot.nl/2015/07/blog-post_18.html - Музыку на паузу

планета FOREVER!!!

Pikener
Дата: Понедельник, 20 Марта 2017, 20:35 | Сообщение # 3
Пользователь
Сообщений: 7
Награды: 0
Репутация: 0
Замечания: 0%
Цитата dmit ()
http://renpyfordummies.blogspot.nl/2015/07/blog-post_18.html - Музыку на паузу

Хорошо... Вот только как адаптировать этот скрипт, чтобы он при вызове меню (нажатии esc/ring mouse click) ставил музыку на паузу?

dmit
Дата: Понедельник, 20 Марта 2017, 22:29 | Сообщение # 4
Проверенный
Сообщений: 102
Награды: 0
Репутация: 15
Замечания: 0%
Вставте $ renpy.audio.audio.get_channel("music").pause() в конец screen load:
и $ renpy.audio.audio.get_channel("music").unpause() в конец screen say: и screen nvl:
На паузу встанет канал "music"


планета FOREVER!!!

Pikener
Дата: Понедельник, 20 Марта 2017, 23:40 | Сообщение # 5
Пользователь
Сообщений: 7
Награды: 0
Репутация: 0
Замечания: 0%
Хм, не помогло... И не совсем понял почему нужно ставить в конец screen load:, а не например screen save:
Вот весь код screens.rpy

Код

# Этот файл публично доступен. Модифицируйте его под свои сообственные экраны.

##############################################################################
# Say
#
# Экран отображения ADV-диалога.
# http://www.renpy.org/doc/html/screen_special.html#say
screen say:

    # Умолчания для side_image и two_window
    default side_image = None
    default two_window = False

    # Решаем, нужен ли нам двухоконный или однооконный вариант.
    if not two_window:

        # Вариант с одним окном.
        window:
            id "window"

            has vbox:
                style "say_vbox"

            if who:
                text who id "who"

            text what id "what"

    else:

        # Вариант с двумя окнами.
        vbox:
            style "say_two_window_vbox"

            if who:
                window:
                    style "say_who_window"

                    text who:
                        id "who"

            window:
                id "window"

                has vbox:
                    style "say_vbox"

                text what id "what"

    # Если есть изображение, отобразить его над текстом.
    if side_image:
        add side_image
    else:
        add SideImage() xalign 0.0 yalign 1.0

    # Использовать быстрое меню.
    use quick_menu
$ renpy.audio.audio.get_channel("music").unpause()

##############################################################################
# Choice
#
# Экран для отображения внутриигровых меню.
# http://www.renpy.org/doc/html/screen_special.html#choice

screen choice:

    window:
        style "menu_window"
        xalign 0.5
        yalign 0.5

        vbox:
            style "menu"
            spacing 2

            for caption, action, chosen in items:

                if action:

                    button:
                        action action
                        style "menu_choice_button"

                        text caption style "menu_choice"

                else:
                    text caption style "menu_caption"

init -2 python:
    config.narrator_menu = True

    style.menu_window.set_parent(style.default)
    style.menu_choice.set_parent(style.button_text)
    style.menu_choice.clear()
    style.menu_choice_button.set_parent(style.button)
    style.menu_choice_button.xminimum = int(config.screen_width * 0.75)
    style.menu_choice_button.xmaximum = int(config.screen_width * 0.75)

##############################################################################
# Input
#
# Экран для отображения renpy.input()
# http://www.renpy.org/doc/html/screen_special.html#input

screen input:

    window style "input_window":
        has vbox

        text prompt style "input_prompt"
        input id "input" style "input_text"

    use quick_menu

##############################################################################
# Nvl
#
# Экран для NVL-диалога и меню.
# http://www.renpy.org/doc/html/screen_special.html#nvl

screen nvl:

    window:
        style "nvl_window"

        has vbox:
            style "nvl_vbox"

        # Отображать диалог.
        for who, what, who_id, what_id, window_id in dialogue:
            window:
                id window_id

                has hbox:
                    spacing 10

                if who is not None:
                    text who id who_id

                text what id what_id

        # Отображать меню, если есть.
        if items:

            vbox:
                id "menu"

                for caption, action, chosen in items:

                    if action:

                        button:
                            style "nvl_menu_choice_button"
                            action action

                            text caption style "nvl_menu_choice"

                    else:

                        text caption style "nvl_dialogue"

    add SideImage() xalign 0.0 yalign 1.0

    use quick_menu
$ renpy.audio.audio.get_channel("music").unpause()

##############################################################################
# Main Menu
#
# Экран для отображения главного меню при запуске Ren'Py.
# http://www.renpy.org/doc/html/screen_special.html#main-menu

label main_menu:
    call screen main_menu

label restart:
    call screen yesno_prompt(message=u"Точно хотите начать игру заново?", yes_action=Start(), no_action=Jump("main_menu"))

screen main_menu:
    tag menu
    imagemap:
            ground "images/menu1.png"   
            hover "images/menu2.png"
            alpha True

            hotspot (217, 169, 292, 287) action Jump("restart")
            hotspot (505, 125, 260, 236) action FileLoad(1, confirm=False, page="auto", newest=True)
            hotspot (374, 496, 217, 204) action ShowMenu("load")
            hotspot (766, 195, 230, 234) action ShowMenu("preferences1")
            hotspot (111, 11, 352, 66) action OpenURL("https://vk.com/brony_in_pony")
            hotspot (806, 479, 138, 239) action Quit(confirm=False)
init -2 python:
    config.main_menu_music = "music/bg3.mp3"

##############################################################################
# Navigation
#
# Экран, включаемый в другие экраны для отображения навигации и фона.
# http://www.renpy.org/doc/html/screen_special.html#navigation

##############################################################################
# Save, Load
#
# Экраны для сохранения и загрузки игры.
# http://www.renpy.org/doc/html/screen_special.html#save
# http://www.renpy.org/doc/html/screen_special.html#load

# Ибо сохранение и загрузка очень похожи, мы совмещаем их в один экран,
# file_picker. Потом мы используем его из экранов
# загрузки и сохранения.

screen save:
    
    tag menu

    imagemap:
        ground "images/menu1s.png"
        hover "images/menu2s.png"
        cache False

     
        hotspot (594,150,97,86) clicked FilePage(1)
        hotspot (594,235,92,63) clicked FilePage(2)
        hotspot (594,298,92,64) clicked FilePage(3)
        hotspot (594,362,92,64) clicked FilePage(4)
        hotspot (594,426,92,64) clicked FilePage(5)
        hotspot (594,486,95,89) clicked FilePage("auto")
        
        hotspot (138, 142, 406, 206) clicked FileSave(1):
            use load_save_slot(number=1)
        hotspot (138, 376, 406, 206) clicked FileSave(3):
            use load_save_slot(number=3)
        hotspot (738, 143, 406, 206) clicked FileSave(2):
            use load_save_slot(number=2)
        hotspot (738, 377, 406, 206) clicked FileSave(4):
            use load_save_slot(number=4)

        hotspot (175, 607, 222, 112) action ShowMenu("load")
        hotspot (400, 600, 240, 123) action ShowMenu("preferences")
        hotspot (640, 600, 303, 119) action MainMenu()
        hotspot (945, 610, 150, 112) action Quit(confirm=False)

        hotspot (1150, 5, 95, 100) action Return()
         
screen load:
   
   tag menu

   imagemap:
        ground "images/menu1l.png"
        hover "images/menu2l.png"
        cache False
        
        hotspot (594,150,97,86) clicked FilePage(1)
        hotspot (594,235,92,63) clicked FilePage(2)
        hotspot (594,298,92,64) clicked FilePage(3)
        hotspot (594,362,92,64) clicked FilePage(4)
        hotspot (594,426,92,64) clicked FilePage(5)
        hotspot (594,486,95,89) clicked FilePage("auto")
        
        hotspot (138, 142, 406, 206) clicked FileLoad(1):
            use load_save_slot(number=1)
        hotspot (138, 376, 406, 206) clicked FileLoad(3):
            use load_save_slot(number=3)
        hotspot (738, 143, 406, 206) clicked FileLoad(2):
            use load_save_slot(number=2)
        hotspot (738, 377, 406, 206) clicked FileLoad(4):
            use load_save_slot(number=4)

        hotspot (175, 607, 222, 112) action ShowMenu("save")
        hotspot (400, 600, 240, 123) action ShowMenu("preferences")
        hotspot (640, 600, 303, 119) action MainMenu()
        hotspot (945, 610, 150, 112) action Quit(confirm=False)

        hotspot (1150, 5, 95, 100) action Return()
$ renpy.audio.audio.get_channel("music").pause()

screen load_save_slot:
    $ file_text = "% 2s. %s\n%s" % (
                        FileSlotName(number, 4),
                        FileTime(number, empty=_("Empty Slot")),
                        FileSaveName(number))

    add FileScreenshot(number) xpos 8 ypos 8
    text file_text xpos 10 ypos 15 size 30 color "#ffffff" outlines [ (2, "#302B54") ]
    
    key "save_delete" action FileDelete(number)
    
init -2 python:
    
    config.thumbnail_width = 388
    config.thumbnail_height = 188

##############################################################################
# Preferences
#
# Экран, позволяющий пользователю изменять настройки.
# http://www.renpy.org/doc/html/screen_special.html#prefereces

screen preferences:
    tag menu
    imagemap:
        ground "images/menu1o.png"
        hover "images/menu2o.png"
        cache False
        hotspot (175, 607, 222, 112) action ShowMenu("save")
        hotspot (400, 600, 240, 123) action ShowMenu("load")
        hotspot (640, 600, 303, 119) action MainMenu()
        hotspot (945, 610, 150, 112) action Quit(confirm=False)

        hotspot (898, 185, 110, 48) action Preference("display", "window")
        hotspot (635, 184, 239, 49) action Preference("display", "fullscreen")

        hotspot (1150, 5, 95, 100) action Return()
    # Разместить навигационные колонки в сетку шириной 3.
    grid 1 1:
        style_group "prefs"
        xfill True

        # Левая колонка.
        vbox:
            frame:
                style_group "pref"
                bar value Preference("text speed")

            frame:
                style_group "pref1"
                bar value Preference("auto-forward time")
            frame:
                style_group "pref1"
                bar value Preference("music volume")

            frame:
                style_group "pref1"
                bar value Preference("sound volume")

init -2 python:
    style.pref_frame.xfill = True
    style.pref_frame.xmargin = 20
    style.pref_frame.top_margin = 260
    style.pref_frame.background = None
    style.pref_vbox.xfill = True
    style.pref_slider.xmaximum = 258
    style.pref_slider.xalign = 0.65
    style.pref_slider.left_bar = "images/menu_pol2.png"
    style.pref_slider.right_bar = "images/menu_pol1.png"
    style.pref_slider.ymaximum = 30
    style.pref_slider.xmaximum = 258
    style.pref_slider.thumb = "images/menu_bup.png"
    style.pref_slider.thumb_offset = 6
    style.pref_slider.thumb_shadow = None

    style.pref1_frame.xfill = True
    style.pref1_frame.xmargin = 20
    style.pref1_frame.top_margin = 30
    style.pref1_frame.background = None
    style.pref1_vbox.xfill = True
    style.pref1_slider.xmaximum = 258
    style.pref1_slider.xalign = 0.65
    style.pref1_slider.left_bar = "images/menu_pol2.png"
    style.pref1_slider.right_bar = "images/menu_pol1.png"
    style.pref1_slider.ymaximum = 30
    style.pref1_slider.xmaximum = 258
    style.pref1_slider.thumb = "images/menu_bup.png"
    style.pref1_slider.thumb_offset = 6
    style.pref1_slider.thumb_shadow = None

screen preferences1:
    tag menu
    imagemap:
        ground "images/menu1o.png"
        hover "images/menu2o.png"
        cache False
        hotspot (175, 607, 222, 112) action ShowMenu("save")
        hotspot (400, 600, 240, 123) action ShowMenu("load")
        hotspot (640, 600, 303, 119) action MainMenu()
        hotspot (945, 610, 150, 112) action Quit(confirm=False)

        hotspot (898, 185, 110, 48) action Preference("display", "window")
        hotspot (635, 184, 239, 49) action Preference("display", "fullscreen")

        hotspot (1150, 5, 95, 100) action Return()
    # Разместить навигационные колонки в сетку шириной 3.
    grid 1 1:
        style_group "prefs"
        xfill True

        # Левая колонка.
        vbox:
            frame:
                style_group "pref"
                bar value Preference("text speed")

            frame:
                style_group "pref1"
                bar value Preference("auto-forward time")
            frame:
                style_group "pref1"
                bar value Preference("music volume")

            frame:
                style_group "pref1"
                bar value Preference("sound volume")

            

           

init -2 python:
    style.pref_frame.xfill = True
    style.pref_frame.xmargin = 20
    style.pref_frame.top_margin = 260
    style.pref_frame.background = None
    style.pref_vbox.xfill = True
    style.pref_slider.xmaximum = 258
    style.pref_slider.xalign = 0.65
    style.pref_slider.left_bar = "images/menu_pol2.png"
    style.pref_slider.right_bar = "images/menu_pol1.png"
    style.pref_slider.ymaximum = 30
    style.pref_slider.xmaximum = 258
    style.pref_slider.thumb = "images/menu_bup.png"
    style.pref_slider.thumb_offset = 6
    style.pref_slider.thumb_shadow = None

    style.pref1_frame.xfill = True
    style.pref1_frame.xmargin = 20
    style.pref1_frame.top_margin = 30
    style.pref1_frame.background = None
    style.pref1_vbox.xfill = True
    style.pref1_slider.xmaximum = 258
    style.pref1_slider.xalign = 0.65
    style.pref1_slider.left_bar = "images/menu_pol2.png"
    style.pref1_slider.right_bar = "images/menu_pol1.png"
    style.pref1_slider.ymaximum = 30
    style.pref1_slider.xmaximum = 258
    style.pref1_slider.thumb = "images/menu_bup.png"
    style.pref1_slider.thumb_offset = 6
    style.pref1_slider.thumb_shadow = None

##############################################################################
# Yes/No Prompt
#
# Экран, спрашивающий у пользователя вопрос да/нет.
# http://www.renpy.org/doc/html/screen_special.html#yesno-prompt

screen yesno_prompt:

    modal True

    window:
        style "gm_root"

    frame:
        style_group "yesno"

        xfill True
        xmargin .05
        ypos .1
        yanchor 0
        ypadding .05

        has vbox:
            xalign .5
            yalign .5
            spacing 30

        label _(message):
            xalign 0.5

        hbox:
            xalign 0.5
            spacing 100

            textbutton _("Да") action yes_action
            textbutton _("Нет") action no_action

    # Правый щелчок и escape отвечают "нет".
    key "game_menu" action no_action

init -2 python:
    style.yesno_button.size_group = "yesno"
    style.yesno_label_text.text_align = 0.5
    style.yesno_label_text.layout = "subtitle"

##############################################################################
# Quick Menu
#
# Экран, входящий в экран save и дающий некоторые полезные функции

screen quick_menu:
    imagemap:
        ground "images/frame_menu1.png"
        hover "images/frame_menu2.png"

        alpha False

        hotspot (8, 689, 34, 23) action Rollback()
        hotspot (1238, 689, 34, 23) action Skip()

Pikener
Дата: Вторник, 21 Марта 2017, 11:20 | Сообщение # 6
Пользователь
Сообщений: 7
Награды: 0
Репутация: 0
Замечания: 0%
Цитата dmit ()
Вставте $ renpy.audio.audio.get_channel("music").pause() в конец screen load:
и $ renpy.audio.audio.get_channel("music").unpause() в конец screen say: и screen nvl:
На паузу встанет канал "music"

Нашёл в чём была ошибка, теперь всё работает, спасибо! Однако теперь музыки в главном меню вообще нет...

dmit
Дата: Вторник, 21 Марта 2017, 19:56 | Сообщение # 7
Проверенный
Сообщений: 102
Награды: 0
Репутация: 15
Замечания: 0%
Цитата Pikener ()
теперь музыки в главном меню вообще нет...
да, странный эффект.
Вижу только один выход - не использовать паузу в канале "music". Сделать свой канал и там проигрывать фоновую музыку с паузами :)
Код
init:
# регистрируем новый канал:
   $ renpy.music.register_channel("bgs", "sfx", loop=True)

label start:
    stop music #останавливаем музыку главного меню
    play bgs "muz.mp3" # запускаем фоновую музыку на канале "bgs" и далее заменить паузы и унпаузы на канал "bgs"


планета FOREVER!!!

Pikener
Дата: Вторник, 21 Марта 2017, 21:36 | Сообщение # 8
Пользователь
Сообщений: 7
Награды: 0
Репутация: 0
Замечания: 0%
dmit, Ещё раз спасибо!)

Pikener
Дата: Четверг, 23 Марта 2017, 01:33 | Сообщение # 9
Пользователь
Сообщений: 7
Награды: 0
Репутация: 0
Замечания: 0%
dmit, Вылезла новая проблема, а именно: изменение громкости.
Есть четыре канала: music, sound, bgs1 и bgs2, а в настройках громкость регулируется только у music и sound.

Можно сделать так, что при изменении громкости канала music, bgs1 и bgs2 принимали такое же значение?

--Всё разобрался, нужно было sfx заменить на music--


Сообщение отредактировал Pikener - Четверг, 23 Марта 2017, 02:10

Pikener
Дата: Понедельник, 27 Марта 2017, 00:55 | Сообщение # 10
Пользователь
Сообщений: 7
Награды: 0
Репутация: 0
Замечания: 0%
dmit, Привет, извини, что снова беспокою тебя, но всё по тому же вопросу.
По определённым причинам перенёс игру на новую версию renpy, так сказать. А там меню изменено, да и вообще сам файл screens.rpy, плюс ещё файл gui.rpy теперь отвечает за некоторые настройки.

Если действовать по старой схеме, то скрипт вовсе не работает. Если прописывать строки
$ renpy.audio.audio.get_channel("music").pause()
и
$ renpy.audio.audio.get_channel("music").unpause()
Не в конце, а в ином месте, то скрипт работает наполовину, т.е. на паузу ставит, а убирать: убирает на 1 сек, после чего музыка снова на паузу встаёт.
Форум о визуальных новеллах » Для разработчиков » Ren'Py » Музыка в меню
Страница 1 из 11
Поиск: