Sim, a bola está entrando (e saindo) da área2D quando inicio o jogo
Sim global.gd
, é um script carregado automaticamente
No global eu tenho uma grande área2d que detecta se um corpo entrou.
var chase_ball
dentro do global estão sendo atualizados mas no Global.chase_ball
é sempre falso (o valor padrão)
Originalmente o area2D estava dentro do nó inimigo mas eu quero que o area2D seja fixado na cena principal, não se movendo junto com o inimigo
global.gd:
extends Node2D
var chase_ball = false
func _process(delta):
print(chase_ball)
func _on_ball_detector_body_entered(body):
chase_ball = true
func _on_ball_detector_body_exited(body):
chase_ball = false
saída:
true
false
true
false
(same loop as above)
inimigo.gd:
func _process(delta):
print(Global.chase_ball)
saída:
false
false
false
false
(same loop as above)
O resultado esperado é Global.chase_ball
atualizar de acordo com ofunc _on_ball_detector_body_entered/exited(body):
Se você estiver carregando automaticamente
global.gd
, o Editor não estará conectando os métodos aos sinais.Sim, você tem métodos que correspondem aos sinais e provavelmente os criou conectando-os... Mas a conexão não faz parte do script. Em vez disso, ele é salvo junto com
Node
(ou seja, salvo em uma cena).Então, quando você carregar automaticamente esse script, Godot criará um novo Node para ele, e ele não terá as conexões.
Agora, você diz que quer que o
Area2D
- que estaria emitindo os sinais - esteja na sua tela principal. Portanto, o caminho de menor resistência seria:Tenha um script por
Area2D
si só.Conecte os sinais do
Area2D
a si mesmo usando o editor, para que haja métodos para eles neste novo script.E desses métodos chamamos de global.
Claro que nesse ponto você não precisa ter esses métodos no
global.gd
, você pode removê-los e acessarchase_ball
diretamente: