Приведение сцены к типу прикрепленного скрипта или инстансинг с передачей параметра в Godot

onready var _boardView_scene = load("res://UrBoardView.tscn") получает ссылку на сцену. Затем я пытаюсь создать подобную сцену _urBoardViewInstance = _boardView_scene.instance(). Сцена UrBoardView имеет сценарий типа BoardView, подобный этому, до самого верхнего узла (что означает, что сцена имеет тип BoardView) -

extends Node
class_name BoardView

_urBoardViewInstance здесь создается как узел. Передача его в BoardView здесь не работает (дает значение null) - var boardViewCast = _urBoardViewInstance as BoardView Мне нужно вызвать специальный метод инициализации из сценария BoardView, прежде чем отправлять его в add_child(_urBoardViewInstance). По сути, я хочу создать экземпляр сцены не как узел, а как тип скрипта, который он прикрепил. (Или просто вызовите вот так

_urBoardViewInstance = _boardView_scene.instance().new(board)

что, по-видимому, сейчас невозможно в Годо.) И то литье не работает. Вот как я подбираю -

var boardViewCast: BoardView
_urBoardViewInstance = _boardView_scene.instance()
boardViewCast = _urBoardViewInstance as BoardView
boardViewCast.init(gameplay.Board)

boardViewCast после этого будет нулевым. В принципе вообще не забрасывает.


person Krinjon    schedule 24.03.2021    source источник
comment
Кастинг должен работать. Понятия не имею, почему это не удается. Вы не получаете ошибок? Какая версия Годо? - В любом случае, если вам нужно вызвать собственный метод, вы можете попробовать _ 1_, для которого не требуется преобразование.   -  person Theraot    schedule 24.03.2021
comment
@Theraot `` `` var boardViewCast: BoardView _urBoardView = _boardView_scene.instance () boardViewCast = _urBoardView as BoardView boardViewCast.init (gameplay.Board) `` вызывающий init говорит - Неверный вызов. Несуществующая функция init в базе Nil. также boardViewCast показывает null в отладчике. работал с 3.2.3 mono, а теперь попробовал только стандартную нормальную версию 3.2.3 stable. то же самое.   -  person Krinjon    schedule 25.03.2021
comment
@Theraot, извини. поэтому в сценарии я пытался установить переменную, получая узел со сцены. onready var board: UrBoard = $ UrBoard вот так. удаление переменной устранило проблему. Не знаю, почему это может вызвать проблему. Потому что сцена была в порядке, будучи экземпляром в качестве узла. и все нормально добавлялось к ребенку. В скрипте ошибок не было. он отлично работал в своей собственной сцене. В любом случае, вы были правы, это должно было сработать.   -  person Krinjon    schedule 25.03.2021


Ответы (1)


поэтому в сценарии я пытался установить переменную, получая узел со сцены. onready var board: UrBoard = $UrBoard нравится это. Удаление переменной устранило проблему (на самом деле не установка переменной из getNode. Сохраните переменную). Не знаю, почему это может вызвать проблему. Потому что сцена была в порядке, будучи экземпляром в качестве узла. и все нормально добавлялось к ребенку. В скрипте ошибок не было. он отлично работал в своей собственной сцене.

person Krinjon    schedule 25.03.2021