¿Hay alguna forma conveniente de centrar un nodo, o más específicamente, un TextureRect, en la pantalla? Tenga en cuenta que, en mi caso, mi ventana de visualización está configurada para estirarse en el aspecto 2D "mantener".
Obviamente la posición podría calcularse con la fórmula:
x = WindowWidth / 2 + TextureWidth / 2 y = WindowHeight / 2 + TextureHeight / 2 Pero no he encontrado cómo obtener el tamaño de ventana original del proyecto Godot. Obtengo el ancho de la pantalla a través de this.get_tree().root.size.x , y varía según el tamaño de la ventana. Por ejemplo, el ancho de mi proyecto es 1024 y no me gustaría expresar este ancho en mi código. ¿Es eso posible?
Godot Engine también parece tener la noción de ancla y centrado cuando usas su editor visual, así que sospecho que hay una forma de centrar el nodo sin cálculo manual.
La respuesta de @Theraot muestra el método de posicionamiento del nodo en el centro en función de un ajuste preestablecido, pero coloca el nodo en otro lugar, no en el centro:
(Nota "estado" significa "escena")
import State from '../State.jsx'; import RecoyxLogo from 'res://img/company-logo/recoyx.png'; export default class PresentsState extends State { constructor() { super(); } async _ready() { await godot.yield(this.get_tree(), 'idle_frame'); let recoyxLogo = new godot.TextureRect; recoyxLogo.texture = RecoyxLogo; recoyxLogo.expand = true; recoyxLogo.rect_size = new godot.Vector2(1200 / 2, 600 / 2); // recoyxLogo.rect_position = new godot.Vector2(this.get_tree().root.size.x / 2 + (1200 / 2 / 2), this.get_tree().root.size.y / 2 + (600 / 2) / 2); recoyxLogo.set_anchors_and_margins_preset(godot.Control.PRESET_CENTER); this.add_child(recoyxLogo); } _process(delta) { } } Aquí está State.jsx :
export default class State extends godot.Node2D { constructor() { super(); // this.scale = new godot.Vector2(0.47, 0.47); } }Puede cambiar el tamaño de su control desde el código configurando su rect_size y rect_position .
Y puede hacerlo en un método conectado a la señal "resized" de la raíz del árbol de la escena (la raíz de la escena es un Viewport y, como era de esperar, emite el "resized" cada vez que cambia su tamaño ).
Según el tamaño de la ventana original, puede leerlo desde la configuración del proyecto llamando a ProjectSettings.get_setting pasando la ruta de la propiedad como parámetro. Las propiedades para el tamaño de la ventana son "display/window/size/width" y "display/window/size/height" (puede averiguarlas consultando la ventana Project Settings o en la documentación de ProjectSettings ).
Y sí, puede establecer márgenes (con el método set_margin ) y anclas (con el método set_anchor ) desde el código, y también usar los ajustes preestablecidos (con los métodos set_margins_preset , set_anchors_preset y set_anchors_and_margins_preset ; este último método es una forma conveniente de configurar ambos al mismo tiempo). Establecer el control preestablecido. Control.PRESET_CENTER debería ser suficiente.