0 votes

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) 
in Engine by (24 points)
edited by

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

1 Answer

0 votes
Best answer

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?

by (1,100 points)
selected by

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

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

Supongo que el code que comparto usted (func _on_Area2D_area_exited(area)) es el del scripto Dndnodecontainer, 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 Dndnodecontainer, 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()).

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?

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

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to webmaster@godotengine.org with your username.