实例节点在运行时不可见

问题描述

我有一个网格,它扩展了TileMap,并且试图在其中生成面板。面板扩展了Area2D。

层次结构:
主场景->玩家网格场景->网格场景-> [玩家场景,x个面板场景(通过spawn_panels函数添加)]。

请注意,以上这些都是在2D编辑器中添加的,只有面板是通过脚本添加的。

生成面板,我要在_ready的Grid中运行此功能

func spawn_panels(charType):
  var panelInit = null
  var panel = null
  var childPanel = null

  if charType == PLAYER:
      panelInit = AllyPanel
  elif charType == ENEMY:
      panelInit = EnemyPanel

  for x in grid_s_x:
      for y in grid_s_y:
          panel = panelInit.new(x,y)
          self.add_child(panel)
          panel.set_owner(self)
          panel.set_name("panel" + str(x) + str(y))
          panel.position = map_to_world(Vector2(x,y)) + cell_size / 2

但是,运行游戏时面板不可见。我已经打印了树,可以看到它们已正确添加,并且还验证了它们没有超出范围,因为我已经将其位置硬编码为0、0和玩家位置(玩家可见),但仍然存在不可见。

感谢您的帮助,谢谢!

解决方法

当添加从.new()创建的实例并将其添加到节点树时,结果GDScript不喜欢它。这意味着您必须预加载/加载它(而不是通过类引用它),然后以这种方式添加它。

即:

var a = preload("res://a.tscn")
add_child(a)