Я думаю, что вам нужна функция Godot wrapf()
, позволяющая объектам обтекать область просмотра без указания всех позиций вручную. Вот ваш код уменьшен с помощью этого:
onready var tama = get_viewport_rect().size #Same as declaring in ready function
func _process(delta):
position.x = wrapf(position.x, 0, tama.x) #Wraps around viewport horizontally
position.y = wrapf(position.y, 0, tama.y) #Wraps around viewport vertically
ИЛИ
func _on_VisibilityNotifier2D_screen_exited():
position.x = wrapf(position.x, -100, tama.x)
position.y = wrapf(position.y, -100, tama.y)
ПРИМЕЧАНИЕ. - Когда я проверял это, эффект обтекания работал отлично с обоими методами, однако я нашел его немного меньше работы, чтобы не использовать VisibilityNotifier2D, поэтому, если нет особой причины, по которой вам нужно его использовать, я бы порекомендовал первый метод.
Кроме того, если честно, я не уверен, почему Смещение -100 необходимо во втором методе, однако, когда я тестировал, казалось, что спрайт «вновь появлялся» в правильном месте после того, как он исчезал с экрана. Это может быть связано с размером моего окна, поэтому ваши результаты могут отличаться. Если у кого-то есть лучшее объяснение, пожалуйста, дайте мне знать в комментариях.
Удачи