Was ist das Problem mit .instance() ?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By beluag

Ich habe einen Zweiten Code in dem ich exakt die selben Angaben gemacht habe, dieser hier funktioniert jedoch im Gegensatz nicht, warum?


func shoot():
var Gunbullet = bullet_scene.instance()
get_tree().add_child(Gunbullet)
Gunbullet.position = $Position2D.global_position

Das ist der Zweite Code wobei diese Fehlermeldung erscheint:
Invalid call. Nonexistent function “instance” in base “GDScript”


func shoot():
var bullet = bulletPath.instance()
get_parent().add_child(bullet)
bullet.position = $Node2D/Position2D.global_position

Das ist der erste Code aus einer anderen Scene, dieser funktioniert jedoch.

:bust_in_silhouette: Reply From: SQBX

Sie können .instance() nicht in einem Skript aufrufen. Sie müssen es auf einer Szene nennen. Legen Sie den Pfad für die Variable bullet_scene auf die Szenendatei fest (endet mit .tscn)

Vielen Dank, ich habe es abändern können.
Jedoch gibt dieEngin mir beim ausführen nun eine neue Fehlermeldung:

Invalid call. Nonexistent function “add_child” in base “SceneTree”

Das ist der gesammt Code der Scene:

extends KinematicBody2D

var can_shoot = true
const bullet_scene = preload(“res://Gunbullet.tscn”)

func _physics_process(delta):
if Input.is_action_pressed(“ui_accept”) and can_shoot == true:
print(“Gunshoot”)
$AnimatedSprite.play(“Shoot”)
shoot()
can_shoot = false
$Timer.start()

func shoot():
var Gunbullet = bullet_scene.instance()
get_tree().add_child(Gunbullet)
Gunbullet.position = $Position2D.global_position

func _process(_delta: float) → void:
look_at(get_global_mouse_position())

func _on_Timer_timeout():
can_shoot = true

Vielen Dank für deine nette Hilfe.

beluag | 2023-01-03 18:58