找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 82|回复: 1

[原创] 在界面上【逐句显示歌词】界面功能

[复制链接]
发表于 2025-2-14 10:18:18 | 显示全部楼层 |阅读模式

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

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

×
因为我自己的游戏需要写的小功能,分享给有同样需求的小伙伴
实际效果是,歌词会展示在界面左下角,每句之间有0.3秒的渐变切换
首先,请将你的歌词存在一个特定的储存空间中,我这里用的是Wsong1:
[RenPy] 纯文本查看 复制代码
init python in Wsong1:
    name = "你的曲名"
    lyrics = [
    (2.0, "歌词第一句"),
    (4.5, "歌词第二句"),
    #……
    (4.5, "歌词最后一句")]


注意,歌词前面的数字指的是这个歌词展示时的持续时长

之后,将歌词界面贴进你的项目中:

[RenPy] 纯文本查看 复制代码
screen Lyrics(song,index=0):
    default duration = None
    default line = None
    if index < len(song.lyrics):
        # 获取当前歌词句子的时长和内容
        $ duration, line = song.lyrics[index]
        # 显示当前歌词
        text line:
            align (.05,.95)#这是你的歌词显示位置,默认为左下角
            size 24 #歌词文字大小
            color "#FFFFFF" #歌词颜色
            outlines [(2, "#000000", 0, 0)] #歌词描边
        #规定时长后切换到下一句
        timer duration action [
            Hide("Lyrics",transition=Dissolve(.3)),
            Show("Lyrics",song=song,index=index+1,transition=Dissolve(.3))#如果觉得0.3秒切换渐变太短,可以在这里调节,但注意,切换时间太长,可能需要你调整每句话的显示时长
        ]




最后使用的时候,就直接:
[RenPy] 纯文本查看 复制代码
show screen Lyrics(Wsong1)


就可以啦,是不是很简单!撒!来试试看!

评分

参与人数 1活力 +300 干货 +3 收起 理由
被诅咒的章鱼 + 300 + 3 感谢分享!

查看全部评分

 楼主| 发表于 2025-2-14 10:54:25 | 显示全部楼层
优化了一个版本2,方便歌词定位
版本1中如果其中某一句的时长计算不对可能导致整个歌词的时间轴都有问题,所以优化了以下这个版本:

[RenPy] 纯文本查看 复制代码
init python in Wsong1:
    name = "你的曲名"
    lyrics = [
    (14, "歌词第一句"),
    (19, "歌词第二句"),
    #……
    (185, "歌词最后一句")]



现在歌词的写法,左侧标注的是当前行歌词显示结束的位置(也就是说,基本相当于下一句歌词开始的地方)

歌词界面代码如下:
[RenPy] 纯文本查看 复制代码
screen Lyrics(song,index=0):
    default line = None
    if index < len(song.lyrics):
        $ line = song.lyrics[index][1]        
        if index == 0:
            $ duration=song.lyrics[0][0]
        else:
            $ duration = song.lyrics[index][0] - song.lyrics[index-1][0]
        text line:
            align (.05,.95)
            size 24
            color "#FFFFFF"
            outlines [(2, "#000000", 0, 0)]
        # 在歌词显示完毕后切换到下一句
        timer duration action [
            Hide("Lyrics",transition=Dissolve(.3)),
            Show("Lyrics",song=song,index=index+1,transition=Dissolve(.3))
        ]


回复 支持 抱歉

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 14:36 , Processed in 0.191859 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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