找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 893|回复: 0

[教程] 新人难题-画廊结构解答

[复制链接]
发表于 2025-9-5 18:45:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 Maz马 于 2025-10-13 18:20 编辑

前言:
这是个教学贴,而并非复制即用的
适用于会renpy的screen,button语法,但是不会python
和原生的Gallery不同,Gallery是像幻灯片一样播放图片,以下的方法更像是“剧情节选”

正文:
从本质去思考,这只是一个按钮,点击下去就开始回放剧情节选,不是吗?
(如果是幻灯片,只需要做一个只有图片的label就一样了)

为此我觉得对新人来说,button会比Gallery更简单,更直观
(如果你使用Gallery能够跑通的话,那么也完全没有问题,那是更高级的方式)

让我们看看一个回放按钮的写法:
[RenPy] 纯文本查看 复制代码
#这个局内使用,表示当前存档中这个回放是否被解锁
#如果你需要在主流程判断这个事件是否发生过,那么你应该使用这个非持久化的变量
default cg_01 = 0
#这个局外使用,表示全局游戏中这个回放是否被解锁
default persistent.cg_01 = 0

screen xxxx():
    #图片按钮
    imagebutton:
        #当持久化变量未被解锁时,使用解锁前的图片,且不做任何事
        if not persistent.cg_01:
            idle "解锁前的图片"
        #否则,使用CG图片,且点击后进行回放
        else:
            idle "CG图片"
            action Replay("sj_01")#回放对应的label

label sj_01:
    #假设这就是你要回放的剧情节选
    "你好"
    #结束回放的地方
    $ renpy.end_replay()
    #在你的剧情节选后面把你设置对应变量打开
    $ cg_01 = 1
    $ persistent.cg_01 = 1
    return


这就是一个最基本的结构,通过变量分支来显示图片,点击按钮则回放对应的label。

Gallery就是批量管理了按钮,省去自动化和部分变量定义需要的操作,因此用button来做也压根没有问题
使用button也可以更方便去做一些个性化的雕花,比如边框,标题,动效,或者其他行为

下面的代码主要的不是”回放“这个功能,而是在用界面语言去布局你的按钮
如果你认为下面的布局对你来说有一点难度
那么你可以自己写上方给出的”回想按钮“,自己一个个去布局,下方的只是参考。

[RenPy] 纯文本查看 复制代码
#假设这是你的CG图
image cg_01:
    "#00ffe4"
    xysize(1920,1080)

#假设这是你未解锁的图片
image cg_lock:
    "#838383"
    xysize(1920,1080)

#由于CG都是全屏的,因此我们使用一个变换来使画廊的按钮变小
transform mgallery_zoom():
    zoom 0.25

#设置变量

#用来控制显示哪一页的变量
default gallery_page = 0

#这个局内使用,表示当前存档中这个回放是否被解锁
default cg_01 = 0
#这个局外使用,表示全局游戏中这个回放是否被解锁
default persistent.cg_01 = 0


#主画廊菜单控制器,只控制显示的页数
screen MGallery():
    #表示这个界面在主菜单使用,以确保替换掉相同tag的screen
    tag menu
    if gallery_page == 0:
        use MGallery00()
    if gallery_page == 1:
        use MGallery01()
    if gallery_page == 2:
        use MGallery02()
    #这里需要你按照自己的需要手动维护,就是根据变量显示不同的页面而已,也可以循环生成
    hbox:
        textbutton "<" action SetVariable("gallery_page",gallery_page-1)#给按钮加上变更变量的行为
        textbutton "0" action SetVariable("gallery_page",0)
        textbutton "1" action SetVariable("gallery_page",1)
        textbutton "2" action SetVariable("gallery_page",2)
        textbutton ">" action SetVariable("gallery_page",gallery_page+1)

#单页的画廊,可以直接写在画廊内部,但为了方便管理,因此使用use
screen MGallery00():
    #表示这个界面在主菜单使用,以确保替换掉相同tag的screen
    tag menu
    #使用回放行为的图片按钮
    imagebutton:
        #当持久化变量未被解锁时,使用解锁前的图片,且不做任何事
        if not persistent.cg_01:
            idle "cg_lock" at mgallery_zoom
        #否则,使用CG图片,且点击后进行回放
        else:
            idle "cg_01" at mgallery_zoom
            action Replay("sj_01")#回放行为
    #后面就是一个个的补按钮,用hbox,vbox之类的容器进行布局

screen MGallery01():
    pass#参照上方MGallery00,也就是画廊第0页的写法

screen MGallery02():
    pass#参照上方MGallery00,也就是画廊第0页的写法

label sj_01:
    #假设这就是你要回放的剧情节选
    "你好"
    #结束回放的地方
    $ renpy.end_replay()
    #在你的剧情节选后面把你设置对应变量打开
    $ cg_01 = 1
    $ persistent.cg_01 = 1
    return


#查看我写的更多屎

时间切片的帧动画动态可视组件
https://www.renpy.cn/forum.php?mod=viewthread&tid=1740

在回放中影响当前游戏存档数据的方法
https://www.renpy.cn/forum.php?mod=viewthread&tid=1739

她的心里话!隐藏文本!
https://www.renpy.cn/forum.php?mod=viewthread&tid=1713

能力雷达图
https://www.renpy.cn/forum.php?mod=viewthread&tid=1719

暴学CDD的十四天/附虚拟摇杆
https://www.renpy.cn/forum.php?mod=viewthread&tid=1675

简单rpg地图移动
https://www.renpy.cn/forum.php?mod=viewthread&tid=1652

摇骰子小游戏
https://www.renpy.cn/forum.php?mod=viewthread&tid=1653

猜球盅小游戏
https://www.renpy.cn/forum.php?mod=viewthread&tid=1574

FontGroup() 游戏里全局使用两种字体的方法
https://www.renpy.cn/forum.php?mod=viewthread&tid=1491

粉身碎骨浑不怕,要留答辩在人间




评分

参与人数 1活力 +300 干货 +3 收起 理由
烈林凤 + 300 + 3 感谢分享!

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号 )

GMT+8, 2026-3-31 17:10 , Processed in 0.019461 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表