找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 70|回复: 4

[已解决] 关于根据章节阅读进度解锁内容的设置方法

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 青蛙大冲锋 于 2024-5-18 00:55 编辑

老师们好,如题想请教一下根据章节阅读进度解锁内容的代码设置方法


先简单概述一下我正在做的游戏。
标题页面点击“开始游戏”后会进入有选项的菜单页面,
进入角色列表菜单,选择角色后,选中角色章节阅读才会进入剧情模式,
阅读完后会返回到角色章节的选择页面。

现在我希望实现的效果是根据章节阅读的进度对显示内容进行变更:
1. 角色页面中的简介信息会根据已阅读的章节进度进行解锁/变化,部分信息需要将角色章节全部读完后才会解锁/变化;
2. 刚进入章节选择界面时,只有第一个章节可选,后续的章节是锁定的。
    阅读完章节一后返回页面,解锁章节二的选项,以此类推
   (一开始章节二等后续的章节的选择按钮是一个锁的图片,阅读完前置章节后解锁按钮,通过显示不同screen实现应该不会发生什么逻辑问题);
3. 对于章节的描述会根据阅读的进度变更。每个章节选中后会出现对该章节的简述,这些简述会根据阅读前后显示为不同的内容;

目前我想到的方法就是分别做一个解锁前的screen和解锁后的screen来分开显示解锁前后的内容,
但是有点不知道怎么实现“阅读一次前置章节后解锁内容”/“阅读完所有角色章节后解锁内容”,
弄通了这块逻辑后游戏现阶段版本基本上就差不多没什么问题了
烦请老师们赐教,如果有更好的设置方法也请告知,
非常感谢!


发表于 7 天前 | 显示全部楼层
1. 根据进度解锁/变化的需求,常见做法是定义一大堆标识(flag),在脚本推进到某个位置时对标识进行赋值。具体标识是用直接用default语句定义布尔型变量还是用个什么容器是个小的细节问题,看个人喜好。
2. 楼主已经想到了章节选择使用按钮,那么只需要定义按钮时加上一个 sensitive 特性的控制条件即可。通常可以直接根据对应的标识(flag)来判断该按钮是否可用,并且也可以设置 insensitive 状态下按钮的图片(变灰等效果)。详见 https://doc.renpy.cn/zh-CN/screens.html#imagebutton
3. “对章节的描述”,如果使用的是文本组件的话,解决方案就很多。比如在同一个位置把所有可能出现的文本都写上,在界面定义时使用一堆 showif 语句,根据上面提到的标识来判断是否显示。https://doc.renpy.cn/zh-CN/screens.html#showif 。动态可视组件也可以实现类似效果。https://doc.renpy.cn/zh-CN/displayables.html#dynamic-displayables
回复 支持 抱歉

使用道具 举报

发表于 7 天前 | 显示全部楼层
本帖最后由 烈林凤 于 2024-5-15 20:49 编辑

我对这个功能也有点兴趣,便稍微写了一下

[RenPy] 纯文本查看 复制代码
define text_character_A = [0,1]
define text_character_B = [0]
default hovered_show = ""

screen character_screen:
    fixed:
        add "#fff"
        xycenter(0.5,0.5)
        xysize(1500,1000)
        vbox:
            spacing 10
            align (0.05,0.05)
            textbutton "角色A的故事":
                hovered SetVariable("hovered_show","A")
                action Jump("character_part_A")
            textbutton "角色B的故事":
                hovered SetVariable("hovered_show","B")
                action Jump("character_part_B")

        frame:
            align (0.9,0.5)
            xysize(1000,900)
            if hovered_show == "A":
                vbox:
                    if 0 in text_character_A:
                        text "这是一句话。"
                    if 1 in text_character_A:
                        text "这是之后的第一句话。"
                    if 2 in text_character_A:
                        text "这是第二句话。"
            if hovered_show == "B":
                vbox:
                    if 0 in text_character_B:
                        text "该角色故事未解锁,请去查看A的故事。"
                    if 1 in text_character_B:
                        text "这是角色B的故事。"
                    if 2 in text_character_B:
                        text "这是B的第二句简介"

label start:
    while True:
        call screen character_screen
    return

label character_part_A:
    "A" "我是角色A。"
    "A" "我将讲述我的角色故事。"
    "A" "Long long ago……"
    $ text_character_A.append(2)
    $ text_character_B.append(1)
    $ text_character_B.remove(0)
    "A" "我讲完了,你可以回到上一级进行查看了。"
    return

label character_part_B:
    "B" "我是角色B。"
    "B" "我将讲述我的角色故事。"
    "B" "Long long ago……"
    $ text_character_B.append(2)
    "B" "我讲完了,你可以回到上一级进行查看了。"
    return


没有写注释,因为实现这样的功能非常简单,翻阅文档就能知道使用方法,代码复制运行之后能直接看到效果

诅咒章鱼大大写的解决方法稍微有些笼统,关于那个动态可视组件,那个只能显示可视化组件(image),既然你需要的是文本,那不需要使用
我写的这个方法也存在一定可优化的部分,自己再多去尝试一下吧。
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
被诅咒的章鱼 发表于 2024-5-15 09:11
1. 根据进度解锁/变化的需求,常见做法是定义一大堆标识(flag),在脚本推进到某个位置时对标识进行赋值。具 ...

谢谢版主老师!
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
烈林凤 发表于 2024-5-15 20:43
我对这个功能也有点兴趣,便稍微写了一下

谢谢老师分享!
回复 支持 抱歉

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 22:17 , Processed in 0.124780 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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