Привет, у меня есть функция, которая размещает тело KinematicBody2D (Player) рядом с Node2D (портал). 2 портала связаны друг с другом, и когда игрок входит в портал X в сцене A, они помещаются рядом с соответствующим порталом X в сцене B и наоборот. Вот функция:
func fix_player_position(entry_portal_link_id):
var pos = exit_positions[entry_portal_link_id]
var new_pos: Vector2
print("Current entry points for ")
print(exit_positions)
$player.set_global_position(Vector2(0,0))
print("Player's position before change: " + str($player.get_global_position()))
if portal_list[entry_portal_link_id].landing_point == Direction.Up:
new_pos = Vector2(pos.x, pos.y-64)
elif portal_list[entry_portal_link_id].landing_point == Direction.Down:
new_pos = Vector2(pos.x, pos.y+64)
elif portal_list[entry_portal_link_id].landing_point == Direction.Left:
new_pos = Vector2(pos.x-64, pos.y)
elif portal_list[entry_portal_link_id].landing_point == Direction.Right:
new_pos = Vector2(pos.x+64, pos.y)
$player.set_global_position(new_pos)
print(pos)
print(new_pos)
print($player.get_global_position())
здесь мы получаем позицию Node2D, сбрасываем позицию игроков (KinematicBody2D) в (0,0), применяем смещение в зависимости от того, с какой стороны мы хотим разместить KinematicBody2D, а затем установите новую позицию и распечатайте все позиции. Однако это не работает правильно. Вот последний вывод
Current entry points for
{house_link1:(-3807.48999, 11041.799805), house_link2:(-4132.839844, 10655)} # We store the positions in a dictionary using the portal ID
Player's position before change: (-26252.199219, 11936) # This is supposed to be (0,0)
(-4132.839844, 10655) # The pos variable, i.e the stored position of the Node2D
(-4132.839844, 10719) # The new_pos, i.e. the intended position of the character
(-30385.039062, 22655) # The position of the character after setting
Комментарии # добавлены мной, чтобы уточнить, что выводится на печать. Как вы можете ясно видеть, вызов set_global_position неправильно устанавливает позицию. Однако он правильно устанавливает положение игроков в другой сцене.
Сцена A -> Сцена B, работает правильно
Сцена B -> Сцена A, неожиданно не работает правильно.
Как вы видите, я немного растерялся, это ошибка в самом gdscript? Или я идиот и делаю что-то не так?
Вот полный вывод перехода из Сцены A -> Сцена B -> Сцена A
Current entry points for
{house_link1:(32, -288), house_link2:(-355.494995, -477.505005)}
Player's position before change: (0, 0)
(-355.494995, -477.505005) # pos
(-355.494995, -413.505005) # new_pos
(-355.494995, -413.505005) # players position
Current entry points for
{house_link1:(-3807.48999, 11041.799805), house_link2:(-4132.839844, 10655)}
Player's position before change: (-26252.199219, 11936)
(-4132.839844, 10655) # pos
(-4132.839844, 10719) # new_pos
(-30385.039062, 22655) # players_position