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
相关产品推荐
相关产品推荐

