示例:
创建一个包含Label的场景, 并修改其属性。
新建另一场景, 用代码添加MLabel。
运行后将报错: Invalid set index 'text' (on base: 'null instance') with value of type 'String'.
解决方案:
不使用new(), 使用instantiate()。
将var new_mlabel = MLabel.new() 修改为 var new_mlabel = preload("res://mlabel.tscn").instantiate()
可能的原因:
new() 的操作对象是类(.gd文件), instantiate()的操作对象是场景(.tscn文件)。
场景=类(可选)+ 场景树结构等信息。 类本身不清楚场景如何组织, 也就无法通过$或是get_node()找到组件。
总结:
new()适用于创建与组件无关的类, 如纯算法。
instantiate()适用于创建包含组件的类。
创建一个包含Label的场景, 并修改其属性。
新建另一场景, 用代码添加MLabel。
运行后将报错: Invalid set index 'text' (on base: 'null instance') with value of type 'String'.
解决方案:
不使用new(), 使用instantiate()。
将var new_mlabel = MLabel.new() 修改为 var new_mlabel = preload("res://mlabel.tscn").instantiate()
可能的原因:
new() 的操作对象是类(.gd文件), instantiate()的操作对象是场景(.tscn文件)。
场景=类(可选)+ 场景树结构等信息。 类本身不清楚场景如何组织, 也就无法通过$或是get_node()找到组件。
总结:
new()适用于创建与组件无关的类, 如纯算法。
instantiate()适用于创建包含组件的类。