Mover un sprite en el evento" func _on_Area2D_area_exited(area)"

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Hernán Montes

Saludos a todos soy nuevo en el uso de godot
Deseo realizar un juego en el que arrastre unos objetos y los coloque en el lugar correcto, al ubicar cada objeto en su lugar se debe mover un sprite que tiene la imagen de una persona la cual ira avanzando siempre y cado coloque los objetos correctamente
lo de arrastrar y ubicación de los objetos ya lo tengo realizado.
El asunto es que cuando ya detecta que el objeto esta ubicado en su lugar deseo mover el sprite pero me sale error "Invalid set index 'position' (on base: 'null instance') with value of type 'Vector2'."

mi funcion es la siguiente

func _on_Area2D_area_exited(area):
	if area.is_in_group(group_node_expected):
		area.get_parent().over_place = false
		node_expected_on_shape.remove(node_expected_on_shape.find(area.get_parent()))
		cont = cont + 1
		print(cont)
		print("correcto")
		global.score()
		$d.position = Vector2(20,20)       #En esta linea es el error

Al parecer no admite esa propiedad.
pues al colocar en boton si funciona

$d.position = Vector2(20,20) 

Muchas gracias.
He logrado solucionar el inconveniente, me ha servido mucho la información brindad.
Lo solucioné ubicando la función mover_per() en el Nodo principal

Hernán Montes | 2020-02-19 14:34

:bust_in_silhouette: Reply From: Bernard Cloutier

Esa error signífica que hace falta la propriedad “position” en la Node $d. Pero también dice la error que $d es una “null instance”, pues $d es nada. El operator $ busca el nombre de una Node niña (en este caso, busca una Node con el nombre “d”). Esa error signífica que hace falta una Node “d” bajo de la Node actual.

Puede compartir la structura de la escena?

Con gusto lo comparto:
Pero creo que mejor lo subo un vídeo al youtube explicando lo que deseo realizar:

https://www.youtube.com/watch?v=Au2x93FPFtg&feature=youtu.be

y mi practica lo pueden descargar de esta dirección
http://programacionybasededatos.vzpla.net/godot/practica1.html

Hernán Montes | 2020-02-14 02:54

Ahorá entiendo por que hay tantas preguntas de idioma español :slight_smile:

Supongo que el code que comparto usted (func _on_Area2D_area_exited(area)) es el del scripto Dnd_node_container, si? Y usted puso la linea $d.position = Vector2(20,20).

Como ya dije, la instruccion $d busca una Node niña que se llama “d”, pero la node “d” no es niña de la node Dnd_node_container, la cual tiene el scripto. Entonces no se encuantra a “d” y le da error. Tiene que dar el camino explicito de la node “d”: get_node("/root/Node2D/d") o igualmente $"/root/Node2D/d" (El simbolo $ es igual a get_node()).

Bernard Cloutier | 2020-02-14 16:17

he realizado lo que me ha indicado y coloque el siguiente codigo
get_node(“res://esenas/principal/Node2D/UI/Control/d”).position=Vector2(20,30)

pero igual me sigue saliendo error

“Invalid set index ‘position’ (on base: ‘null instance’) with value of type ‘Vector2’.”

como podría solucionar este error?

Hernán Montes | 2020-02-17 00:26

El camino de la node en la escena no es el mismo que el en file manager. Ya le he dado el camino correcto: get_node("/root/Node2D/d"). /root siempre es la raíz de juego. La node llamada “Node2D” (mejor lo ponen un nombre mas significativo) es la raíz de su escena principal, entonces su camino es “/root/Node2D”. La node “d” (también podría darle un nombre mas descriptivo) es su niña, entonces su camino es “/root/Node2D/d”.

Si tiene problemas a entender eso, tiene que leer a esos artículos:
https://docs.godotengine.org/es/latest/getting_started/step_by_step/scene_tree.html

https://docs.godotengine.org/es/latest/getting_started/step_by_step/scenes_and_nodes.html

La documentación no es totalmente completa en español, entonces si usted entiende al inglés hay mui buenos tutoriales sobre youtube: https://www.youtube.com/watch?v=Mc13Z2gboEk&list=PLhqJJNjsQ7KF0o0ke_CA2QlqK8BxQNSFS

Bernard Cloutier | 2020-02-17 18:17