Как сделать WindowDialog изменяемым в godot?

#window #resize #godot #gdscript

Вопрос:

Поэтому я сделал это меню для своей игры в годо. Я также создал это окно, которое отображается при нажатии кнопки. Это окно находится WindowDialog в годо, и я хочу, чтобы его размер можно было изменять. Однако я получаю ошибку, когда помещаю код для изменения размера окна. Вот мой код:

 extends WindowDialog

var newSize

func _ready():
    # Change 'hide()' to 'show()' to show the window.
    hide()
    set_process_input(true)
    newSize = self.get_size()
    pass

func _input(event):
    if(event.type == InputEvent.MOUSE_MOTION):
        if(Input.is_mouse_button_pressed(1)):
            if (self.get_local_mouse_position().x > (self.get_size().x - 30)) amp;amp; (self.get_local_mouse_position().y > (self.get_size().y - 30)) :
                newSize  = event.relative_pos
                self.set_size(newSize)
                print(self.get_size().x)
                print(event.relative_x)
 

Ошибка, которую я получаю, заключается в следующем:

 Invalid get index 'type' (on base: 'InputEventMouseMotion').
 

Ответ №1:

Чтобы ответить на вопрос, название, чтобы сделать WindowDialog то, что можно изменить, установите для него resizable значение true.


Теперь об ошибке. Не проверяйте type свойство, проверьте тип event объекта, вот так:

 if event is InputEventMouseMotion:
   pass
 

Или, предполагая , что вы хотите прочитать свойства InputEventMouseMotion , вы можете сделать это:

 var mouse_motion_event := event as InputEventMouseMotion
if mouse_motion_event != null:
   pass
 

Кое-что еще: вам , вероятно, не нужно звонить set_process_input(true) , по крайней мере, не _ready нужно . Если у вас есть определенная _input функция, Годо вызовет ее (а если ее нет _input , то она не будет). Таким образом, единственная причина позвонить set_process_input(true) -это если вы звонили set_process_input(false) раньше.