制作音乐回放

2022/5/18

本节文档介绍如何制作音乐回放,本篇难度稍高,强烈建议搭配源码学习

官方文档:https://www.renpy.cn/doc/rooms.html#music-room

# 前置知识

textbutton、imagebutton,见“QuickMenu(快捷菜单)的制作”一节

相对坐标表示法、绝对坐标表示法,见“添加不同大小的小头像”一节

持久化变量,见“设置和持久化变量”一节

本节内容与上节“制作Gallery”相似

# 需求描述

音乐回放是一般 Galgame 中非常常见的功能,在本节我们实现一个能够根据周目情况,判断是否开放音乐回放及开放多少音乐的音乐回放

# 音乐回放的实现

官方在这里也是给出了四步的方法,这里我们在判断是否要将音乐开放给玩家的方法和官方不大一样,官方文档给的方法是通过判断该音乐是否被玩家看过决定是否开放,而我们的实现结合了官方的方法和持久化变量的方法,判断该音乐是否被玩家听过(二周目开放的“世迷い恋慕”玩家一定是没有听过的),然后用持久化变量判断二周目通关后解锁该音乐

音乐回放代码也是需要分两个部分写,一部分是 screen ,也就是前面制作主菜单那里提到的给玩家看的 GUI ,而还有一部分是音乐回放的具体内容(也就是玩家能听到的音乐是什么),这部分需要放到初始化模块里面,我们来看代码

# screen 部分

也就是给玩家看的 GUI

音乐回放需要播放与主菜单不同的 BGM ,实现方法见最下的“进入退出音乐效果”

# 参考 Ver1.0 screens.rpy 2654-2764行
# ______________________________________________________________________________________________
# Music
screen music_room:
    tag menu
    add "gui/music_room/back.png"

    # Spriterecordings Url
    imagebutton:
        xalign 0.636
        yalign 0.725
        idle "gui/music_room/btn_site_off.png"
        hover "gui/music_room/btn_site_over.png"
        selected_hover "gui/music_room/btn_site_one.png"
        action OpenURL("http://spriterecordings.upper.jp/EmotiveBrilliance/")

    # 2022年5月18日 发现这里写重了一次
    # # 01_heartbeat
    # imagebutton:
    #     xalign 0.0700899
    #     yalign 0.059
    #     idle "gui/music_room/btn_bgm01_off.png"
    #     hover "gui/music_room/btn_bgm01_onover.png"
    #     selected_idle "gui/music_room/btn_bgm01_on.png"
    #     action mr.Play("bgm/bgm01.ogg")

    # 01_heartbeat
    imagebutton:
        xalign 0.0700899
        yalign 0.059
        idle "gui/music_room/btn_bgm01_off.png"
        hover "gui/music_room/btn_bgm01_onover.png"
        selected_idle "gui/music_room/btn_bgm01_on.png"
        action mr.Play("bgm/bgm01.ogg")

    # 08_あの夏まで
    imagebutton:
        xalign 0.0700899
        yalign 0.2516
        idle "gui/music_room/btn_bgm02_off.png"
        hover "gui/music_room/btn_bgm02_onover.png"
        selected_idle "gui/music_room/btn_bgm02_on.png"
        action mr.Play("bgm/bgm05.ogg")

    # prominence
    imagebutton:
        xalign 0.0700899
        yalign 0.466
        idle "gui/music_room/btn_bgm03_off.png"
        hover "gui/music_room/btn_bgm03_onover.png"
        selected_idle "gui/music_room/btn_bgm03_on.png"
        action mr.Play("bgm/bgm03.ogg")

    if persistent.two:
    # 世迷い恋慕
        imagebutton:
            xalign 0.0700899
            yalign 0.675
            idle "gui/music_room/btn_bgm04_off.png"
            hover "gui/music_room/btn_bgm04_onover.png"
            selected_idle "gui/music_room/btn_bgm04_on.png"
            action mr.Play("bgm/bgm49.ogg")
    else:
        imagebutton:
            xalign 0.0700899
            yalign 0.675
            idle "gui/music_room/btn_bgm04_na.png"

    # anonatsu_piano
    imagebutton:
        xalign 0.0700899
        yalign 0.9
        idle "gui/music_room/btn_bgm05_off.png"
        hover "gui/music_room/btn_bgm05_onover.png"
        selected_idle "gui/music_room/btn_bgm05_on.png"
        action mr.Play("bgm/bgm08.ogg")

    # あの夏rock1111
    imagebutton:
        xalign 0.685
        yalign 0.063
        idle "gui/music_room/btn_bgm06_off.png"
        hover "gui/music_room/btn_bgm06_onover.png"
        selected_idle "gui/music_room/btn_bgm06_on.png"
        action mr.Play("bgm/bgm42.ogg")

    # スターチス nightcore
    imagebutton:
        xalign 0.69595
        yalign 0.2575
        idle "gui/music_room/btn_bgm07_off.png"
        hover "gui/music_room/btn_bgm07_onover.png"
        selected_idle "gui/music_room/btn_bgm07_on.png"
        action mr.Play("bgm/bgm47.ogg")

    imagebutton:
        xalign 0.99
        yalign 0.99
        idle "gui/saveload/btn_back_base.png"
        hover "gui/saveload/btn_back_onMouse.png"
        selected_hover "gui/saveload/btn_back_onClick.png"
        action ShowMenu("main_menu_2")

    # 页面下方的提示
    vbox:
        xalign 0
        yalign 1.0
        text "By Luckykeeper:想回顾全部 BGM?请参照{a=https://love69-renpy-remaster-project.github.io/Doc/dev/%E8%A7%A3%E5%8C%85.html}项目组文档站{/a}指南进行解包~"

    # 进入退出音乐效果
    on "replace" action mr.Play()
    on "replaced" action Play("music", "bgm/bgm01.ogg")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112

# 初始化部分

初始化部分写音乐回放需要播放的音乐

代码如下:

# 参考 Ver1.0 screens.rpy 2992-3006行,此处有所删改
init python: # 表示初始化阶段加载,必须加上

    # MusicRoom 实例
    # Step1,创建一个 MusicRoom 实例。
    mr = MusicRoom(fadeout=1.0)

    # Step2. 添加音乐文件。
    mr.add("bgm/bgm01.ogg") # 01_heartbeat
    mr.add("bgm/bgm05.ogg") # 08_あの夏まで
    mr.add("bgm/bgm03.ogg", always_unlocked=True) # prominence
    if persistent.two:
        mr.add("bgm/bgm49.ogg", always_unlocked=True) # 世迷い恋慕
    else:
        mr.add("bgm/bgm49.ogg")
    mr.add("bgm/bgm08.ogg") # anonatsu_piano
    mr.add("bgm/bgm42.ogg") # あの夏rock1111
    mr.add("bgm/bgm47.ogg") # スターチス nightcore
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18