历史记录跳跃
Luckykeeper 2022/5/17
本节文档介绍如何制作历史记录跳跃的功能
参考资料:https://www.renpy.cn/thread-221-1-1.html
# 前置知识
textbutton,见“QuickMenu(快捷菜单)的制作”一节
# 需求描述
历史记录跳跃是 Galgame 中的常见功能,Ren'Py 默认没有实现,我们来实现一个简单的历史记录跳跃
# 修改代码
# 默认实现
先来看 Ren'Py 的历史记录默认实现
# 参考 提交 35e1328 链接: https://github.com/luckykeeper/LOVE69_renpy_remaster/blob/35e1328bce09152fc7ebaf9394102ccbb856c350/%E5%B7%B2%E5%AE%8C%E6%88%90%E7%9A%84%E6%96%87%E6%A1%A3/%E7%94%A8%E6%88%B7%E5%9B%BE%E5%BD%A2%E7%95%8C%E9%9D%A2/screens.rpy#L899 screen.rpy 899-935行
screen history():
tag menu
## 避免预缓存此界面,因为它可能非常大。
predict False
use game_menu(_("历史"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0):
style_prefix "history"
for h in _history_list:
window:
## 此语句可确保如果“history_height”为“None”的话仍可正常显示条
## 目。
has fixed:
yfit True
if h.who:
label h.who:
style "history_name"
substitute False
## 若角色颜色已设置,则从“Character”对象中读取颜色到叙述
## 人文本中。
if "color" in h.who_args:
text_color h.who_args["color"]
$ what = renpy.filter_text_tags(h.what, allow=gui.history_allow_tags)
text what:
substitute False
if not _history_list:
label _("尚无对话历史记录。")
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
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
# 修改
其实是把这里的 text what:
改成了一个 textbutton
,点击后执行跳转功能
修改后的 History 部分代码如下
# 参考 ver1.0 screen.rpy 1653-1694行
screen history():
tag menu
## 避免预缓存此界面,因为它可能非常大。
predict False
use game_menu(_("历史"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0):
style_prefix "history"
for h in _history_list:
window:
## 此语句可确保如果“history_height”为“None”的话仍可正常显示条
## 目。
has fixed:
yfit True
if h.who:
label h.who:
style "history_name"
substitute False
## 若角色颜色已设置,则从“Character”对象中读取颜色到叙述
## 人文本中。
if "color" in h.who_args:
text_color h.who_args["color"]
$ what = renpy.filter_text_tags(h.what, allow=gui.history_allow_tags)
# 历史记录跳跃
## https://www.renpy.cn/thread-221-1-1.html
# 修改的部分就在这里
textbutton what:
substitute False
style "history_text"
action Confirm("要跳转到该处吗?", yes=RollbackToIdentifier(h.rollback_identifier), no=None, confirm_selected=False),
if not _history_list:
label _("尚无对话历史记录。")
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
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