启动Godot游戏时GDScript instantiate函数不存在错误求解决方法
解决Invalid call. Nonexistent function 'instantiate' in base 'GDScript'错误
错误原因
你用preload加载了GDScript脚本文件(res://coin.gd),但instantiate()是**PackedScene(场景)**专属的实例化方法,GDScript对象本身没有这个方法,所以触发报错。
解决方案(推荐):加载场景而非脚本
Godot中实例化节点的常规方式是预加载场景文件(通常是.tscn格式),而非直接加载脚本。假设你的金币逻辑写在coin.gd中,且该脚本挂载在coin.tscn场景里,修改代码如下:
extends Node2D # 预加载金币场景文件,替换成你的实际场景路径 var coin_scene = preload("res://coin.tscn") func _on_timer_timeout(): var coinTemp = coin_scene.instantiate() # 直接使用randi_range生成随机数,无需额外创建RandomNumberGenerator var genint = randi_range(50, 500) coinTemp.position = Vector2(genint, 560) add_child(coinTemp)
备选方案(不推荐):通过脚本创建节点
如果确实需要从脚本直接创建节点,需先创建对应类型的节点实例,再绑定脚本(注意替换成coin.gd实际继承的父类,比如Sprite2D、Area2D等):
extends Node2D var coin_script = preload("res://coin.gd") func _on_timer_timeout(): # 创建脚本对应的节点实例,这里假设coin.gd继承自Area2D,需替换为实际父类 var coinTemp = Area2D.new() coinTemp.script = coin_script var genint = randi_range(50, 500) coinTemp.position = Vector2(genint, 560) add_child(coinTemp)
内容的提问来源于stack exchange,提问作者Sin nombre
相关产品推荐
相关产品推荐

