Ren'Py引擎源代码解读(1)——脚本文件加载

本文深入解析Ren'Py引擎如何加载和处理脚本文件,从renpy.py开始,经过bootstrap.py,聚焦Script.py类的初始化和scan_script_files()函数,详细阐述了脚本的分类、解析和合并过程,为Ren'Py移植到Cocos提供关键理解。
摘要由CSDN通过智能技术生成

因为想要尝试把Ren'Py移植到Cocos上,尽可能的使用原来的rpy文件,这就难免要解析rpy文件,因此就参考了一下Ren'Py自己是怎么解析脚本的。

文件加载

那么从哪里看起呢?先简要看一下Ren'Py的启动过程。启动脚本肯定是根目录下的renpy.py了,前面是一堆设置路径的方法,我们暂且跳过,直接看最后一行

if __name__ == "__main__":
    main()

这里调用了main()函数,算是入口了,main()函数在上面一段

def main():

    renpy_base = path_to_renpy_base()

    # Add paths.
    if os.path.exists(renpy_base + "/module"):
        sys.path.append(renpy_base + "/module")

    sys.path.append(renpy_base)

    # This is looked for by the mac launcher.
    if os.path.exists(renpy_base + "/renpy.zip"):
        sys.path.append(renpy_base + "/renpy.zip")

    # Ignore warnings that happen.
    warnings.simplefilter("ignore", DeprecationWarning)

    # Start Ren'Py proper.
    try:
        import renpy.bootstrap
    except ImportError:
        print >>sys.stderr, "Could not import renpy.bootstrap. Please ensure you decompressed Ren'Py"
        print >>sys.stderr, "correctly, preserving the directory structure."
        raise

    if android:
        renpy.linux = False
        renpy.android = True

    renpy.bootstrap.bootstrap(renpy_base)
前面依然是设置路径导入package,最关键的还是在最后一行,调用了 bootstrap下面的bootstrap()函数,并传入了renpy的根目录。

好那么我们移步bootstrap.py,在renpy文件夹下面,前面又是一堆设定目录的代码,直到第289行

                renpy.main.main()
又调用了 main的main(),继续跳转。

我们要找的在main.py的第239行

    # Load the script.
    renpy.game.exception_info = 'While loading the script.'
    renpy.game.script = renpy.script.Script()

    # Set up error handling.
    renpy.exports.load_module("_errorhandling")
    renpy.style.build_styles() # @UndefinedVariable
    renpy.display.screen.prepare_screens()

    # Load all .rpy files.
    renpy.game.script.load_script() # sets renpy.game.script.
把一个 Script对象赋给了renpy.game.scritp,然后调用 load_script函数。

Script.py这个类是处理脚本的主要类,前面有这么一段说明注释:

    This class represents a Ren'Py script, which is parsed out of a
    collection of script files. Once parsing and initial analysis is
    complete, this object
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值