retreatafter

导航

 

本节目录

  1. 1.游戏入口
  2. 2.文本
    1. (1)对话与角色定义
      1. 1)有角色
      2. 2)无角色
    2. (2)menu
  3. 3.图像
    1. (1)图片文件
    2. (2)scene
    3. (3)show
    4. (4)hide
    5. (5)简单转场效果
    6. (6)同一图像多次显示
  4. 4.音频
    1. (1)音频文件
    2. (2)play
    3. (3)stop
  5. 5.控制台调试
  6. 6.附录

1.游戏入口

  • (1)label start作为renpy游戏默认入口,只允许存在一个start。在screens.rpy中可以查找到textbutton _("开始游戏") action Start()这句代码,在这里,Start()方法对应的就是label start,并执行其中内容。在脚本标签部分将会更深入的解释相关内容。

2.文本

(1)对话与角色定义

1)有角色

  • (1)在renpy中,对话的逻辑为"说话人" "对话内容",renpy将会把说话人放在UI中对话姓名框中,把对话内容放在对话框中。对话人和对话内容都必须由英文双引号""包裹。若对话人进行了变量定义后,对话人无需再用英文双引号""包裹。
    • 2026__引擎.Renpy__核心功能实现.文本.对话与角色定义.有角色
  • (2)对话人连续的说话,可使用"""对话内容(多行)"""三引号包裹,结束一次说话以回车空格一行标识。注意区分于角色一段话中的换行。
    • 2026__引擎.Renpy__核心功能实现.文本.对话与角色定义.有角色
  • (3)对话人说了一长段话,中间需要手动换行,可使用换行符\n。
    • 2026__引擎.Renpy__核心功能实现.文本.对话与角色定义.有角色
  • (4)说话人可采用预处理指令define,使用Character()函数进行角色变量定义(工厂方法),后续也可”监控“该角色的对话并对角色进行强调显示。
    • 预处理指令包括很多,这里的功能主要是指文本替换。(需C语言相关基础知识)
    • 2026__引擎.Renpy__核心功能实现.文本.对话与角色定义.有角色
define a = Character("某A")

label start:
    a "内心\n似乎有点\n触动……\n内心似乎有点触动……"
    return

2)无角色

  • (1)不指定说话人的对话内容,通常用作旁白,省略说话人部分即可,即"对话内容",其余基本用法同有角色。
    • 2026__引擎.Renpy__核心功能实现.文本.对话与角色定义.无角色
label start:
    "内心似乎有点触动……内心似乎有点触动……内心似乎有点触动……"
    return

(2)menu

  • 1)使用menu标签给玩家提供一个分支选项,可配合使用flag变量记录值,根据flag的值来进行剧情分支的实现/收束。
    • 格式如下,其中显示在对话框中的文本部分可以没有但可能存在异常问题当前无法进行保存操作,建议都填写;选项是一个块,带有冒号:。
    • 内容中可以包括对flag值进行调整、在这一部分进行独属于该部分的对话文本、使用pass继续推进到后续内容、使用jump [label]进入到下一个场景(或在判定flag值时进行jump操作。)
    • 2026__引擎.Renpy__核心功能实现.文本.menu
    • 2026__引擎.Renpy__核心功能实现.文本.menu
# 设置图片和音乐的代码省略
define flag = 0

label start:
    menu:
        "这里是对话框显示文字(不建议为空)"
        "选项一":
            # 使用pass会视为完成该部分内容,继续往下推进内容
            pass
            "似乎什么都没有发生"
        "选项二":
            # 修改flag的值,后续根据值来进入不同的剧情
            $ flag = 1
            "似乎内心有些触动……"
        "选项三":
            $ flag = 999
            "?!"

    # 没有任何判定条件,无论选择哪个选项都存在这部分
    "继续前进吧……"
    
    if flag == 1:
        "触动?触动……"
    elif flag == 999:
        jump scene1
    else:
        "确实什么都没有发生"
        # 将回到标签场景start的起点
        jump start

    return

label scene1:
    "此处省略1万字"
    "你来到了知识的尽头……"
    return

3.图像

(1)图片文件

  • (1)在使用代码指定当前位置需要使用的图片前,请将会用到的图片文件放在./game/images文件夹下。图片命名建议为全英文,图片名的大小写不影响读取。图片格式推荐使用png。

(2)scene

  • 1)使用scene语句,可清除当前界面的所有图像,然后显示该图像,通常用作背景显示(或cg)。
  • 2)可使用image标签修改对应图像文件属性,例如实现让图片适配游戏屏幕大小。
    • 2026__引擎.Renpy__核心功能实现.图像
image s1:
    # game文件夹下到图片文件的完整路径
    "/images/s1.jpg"
    # 拉伸压缩图片宽高比以符合窗口比例,填充窗口
    fit "fill"

label start:
    scene s1
    # 纯显示图片无文本无法进入游戏,故此处插入测试文本
    "内心似乎有些触动"
    return

(3)show

  • 1)使用show语句,可插入图像,不会覆盖原有图像,图层位置在scene之上,通常用作角色立绘显示、插图显示。
  • 2)可使用image标签修改对应图像文件属性,例如设置图像锚点(通常定位在中心),默认插入位置等。
    • 2026__引擎.Renpy__核心功能实现.图像.show
image c1:
    # game文件夹下到图片文件的完整路径
    "/images/c1.jpg"
    # 按比例缩放
    zoom 1.0
    # x轴锚点设置在中央
    xanchor 0.5
    # y轴锚点设置在中央
    yanchor 0.5
    # 默认插入时位置,锚点相对于游戏屏幕位置
    xpos 960
    ypos 960


label start:
    show c1
    # 纯显示图片无文本无法进入游戏,故此处插入测试文本
    "内心似乎有些触动"
    return
  • 3)由于图像之间不会覆盖替换,可以插入多张图片,例如实现两人同屏对话效果。在插入图片的基础上修改其位置属性等。
    • 2026__引擎.Renpy__核心功能实现.图像.show

(4)hide

  • 1)上述插入的图像不会自动消失,可使用hide语句,隐藏指定的图像。这里的图像包括用show语句插入的图像和scene语句插入的图像。
    • 2026__引擎.Renpy__核心功能实现.图像

(5)简单转场效果

  • 1)我们用到with语句来连接转场效果,renpy中封装了一些转场效果函数。
  • 2)with fade:0.5秒时间,画面逐渐暗淡至全黑,然后0.5秒时间画面从全黑逐渐变亮成新界面。写在需要进行转场效果的图像同级处。
  • 3)with dissolve:0.5秒时间,使用溶解效果从旧界面切到新界面,图像淡入淡出。写在需要进行转场效果的图像同级处。
  • 2026__引擎.Renpy__核心功能实现.图像
# 图像预设定代码省略
label start:
    scene s1
    with fade
    show c1:
        # 调整图片位置
        xpos 500
    with dissolve
    show c2:
        # 调整图片位置
        xpos 1920-100
    with dissolve
    "如你所见,这里有左右两个占位符"
    return

(6)同一图像多次显示

  • 1)在renpy中1张图像每次调用都会覆盖掉上一次的设置,若需要一张图像同时多次显示在屏幕上(类似于预制体),可使用别名方式。且起别名后,后续同样可以使用该别名进行插入图像操作。
    • 2026__引擎.Renpy__核心功能实现.图像
# 图像预设定代码省略
label start:
    show c2:
        # 调整图片位置
        xpos 1920-100
    show c2 as c2copy1:
        xpos 1920-300
    show c2 as c2copy2:
        xpos 1920-500
    "右侧是3张一样的占位符"
    return

4.音频

(1)音频文件

  • (1)在使用代码指定当前位置需要使用的音频前,请将会用到的音频文件放在./game/audio文件夹下。音频命名建议为全英文,音频名的大小写不影响读取。音频文件格式推荐使用mp3/ogg。

(2)play

  • 1)可使用play标签指定音轨,音轨类型包括audio/music/sound/voice。music类型将循环播放,sound类型仅播放一次,voice类型为语音播放和对话文本同时播放,在切换至下一句对话文本时停止播放。使用路径指定当前位置要播放的音乐。
    • 允许添加fadein/fadeout语句实现音乐的淡入淡出效果。
    • 如果希望默认只播放一次的音效类型循环播放,可以配合使用loop,如play sound "audio/sound01.mp3" loop
    • 2026__引擎.Renpy__核心功能实现.音频
label start:
    scene s1
    # 允许添加fadein/fadeout语句实现音乐的淡入淡出效果
    # 例如下句可以写为 play music "audio/music01.mp3" fadein 1.0 fadeout 1.0
    play music "audio/music01.mp3"
    "这里是一段音乐~\n this is a real music~"
    return

(3)stop

  • 1)可使用stop标签关闭指定的音乐。
label start:
    scene s1
    play music "audio/music01.mp3"
    "这里是一段音乐~\n this is a real music~"
    stop music
    "音乐关闭了"
    return

5.控制台调试

  • (1)在进入游戏后,使用Shift + D打开控制台,当代码内容有更新时,可以在控制台直接重新加载游戏。
    • 2026__引擎.Renpy__核心功能实现

6.附录

  • (1)本节script.rpy完整代码:
define a = Character("某A")

image s1:
    # game文件夹下到图片文件的完整路径
    "/images/s1.jpg"
    # 拉伸压缩图片宽高比以符合窗口比例,填充窗口
    fit "fill"

image c1:
    # game文件夹下到图片文件的完整路径
    "/images/c1.jpg"
    # 按比例缩放
    zoom 1.0
    # x轴锚点设置在中央
    xanchor 0.5
    # y轴锚点设置在中央
    yanchor 0.5
    # 默认插入时位置,锚点相对于游戏屏幕位置
    xpos 960
    ypos 960

image c2:
    # game文件夹下到图片文件的完整路径
    "/images/c2.jpg"
    # 按比例缩放
    zoom 1.0
    # x轴锚点设置在中央
    xanchor 0.5
    # y轴锚点设置在中央
    yanchor 0.5
    # 默认插入时位置,锚点相对于游戏屏幕位置
    xpos 960
    ypos 960

define flag = 0

label start:
    scene s1
    with fade
    play music "audio/music01.mp3"
    show c1:
        # 调整图片位置
        xpos 500
    with dissolve
    show c2:
        # 调整图片位置
        xpos 1920-500
    with dissolve
    "这里是一段音乐~\n this is a real music~"
    
    menu:
        "这里是对话框显示文字(不建议为空)"
        "选项一":
            # 使用pass会视为完成该部分内容,继续往下推进内容
            pass
            "似乎什么都没有发生"
        "选项二":
            # 修改flag的值,后续根据值来进入不同的剧情
            $ flag = 1
            "似乎内心有些触动……"
        "选项三":
            $ flag = 999
            "?!"
    
    # 没有任何判定条件,无论选择哪个选项都存在这部分
    "继续前进吧……"
    
    if flag == 1:
        "触动?触动……"
    elif flag == 999:
        jump scene1
    else:
        "确实什么都没有发生"
        # 将回到标签场景start的起点
        jump start

    return

label scene1:
    "此处省略1万字"
    "你来到了知识的尽头……"
    return
posted on 2026-10-08 00:36  retreatafter  阅读(26)  评论(0)    收藏  举报