You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot 4报错‘Invalid call. Nonexistent function 'size' in base 'Nil'’求助

快速修复方案

报错翻译:无效调用。基础类型“Nil”中不存在函数“size”。


1. 修正JSON文件读取逻辑(适配Godot 4)

你的get_from_json函数存在两个问题:误用flush(这是写入文件时的操作),且缺少错误检查。替换成以下代码:

func get_from_json(filename):
    var file : FileAccess = FileAccess.open("res://" + filename, FileAccess.READ)
    # 检查文件是否成功打开
    if not file:
        print("无法打开文件: ", filename)
        return []  # 返回空列表避免后续崩溃
    var content = JSON.parse_string(file.get_as_text())
    file.close()  # 读取完成后关闭文件,替换原有的flush
    # 验证JSON解析结果是否为数组
    if not content is Array:
        print("JSON格式错误,预期为数组结构")
        return []
    return content

2. 确保JSON文件格式正确

StoryBook.json必须是数组包裹的对象结构,每个对象需包含prompts(数组类型)和story(字符串类型),示例格式:

[
    {
        "prompts": ["你的名字", "最喜欢的食物"],
        "story": "嗨,%s!我也爱吃%s!"
    },
    {
        "prompts": ["宠物类型", "宠物名字"],
        "story": "你的%s叫%s,听起来很可爱!"
    }
]

如果JSON格式错误,JSON.parse_string会返回Nil,直接导致后续size()调用报错。

3. 增加空值检查避免崩溃

在pick_current_story函数中先判断故事列表是否为空,再执行随机选择:

func pick_current_story():
    var stories = get_from_json("StoryBook.json")
    randomize()
    if stories.size() == 0:
        Displaytext.text = "故事加载失败!"
        return
    current_story = stories[randi() % stories.size()]

4. 验证文件路径

确认StoryBook.json确实位于res://根目录下,若放在子文件夹(如res://data/),需修改get_from_json调用时的路径参数。

内容的提问来源于stack exchange,提问作者Alejandro Obando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:57:44