extends Area2D # 场景名称 @export var target_scene_name: String = "room" @export var target_position: Vector2 = Vector2.ZERO # 目标场景的生成位置 (Vector2.ZERO 表示使用默认位置/不设置) # Called when the node enters the scene tree for the first time. func _ready() -> void: # 连接 body_entered 信号 body_entered.connect(_on_body_entered) func _on_body_entered(body: Node2D) -> void: # 检查进入的物体是否为玩家 # 我们可以通过多种方式检查: # 1. 检查是否在 "player" 组中 (推荐,但需要设置) # 2. 检查是否有特定方法 (如 _handle_movement) # 3. 检查类名 (如果 scripts/characters/player.gd 有 class_name) # 这里使用方法检查作为一种鲁棒的方式,或者检查是否为 CharacterBody2D 且父节点层级符合预期 # 最简单直接的方式是检查是否有 _handle_movement 方法,这是 player.gd 特有的 if body.has_method("_handle_movement"): print("玩家进入传送门,正在切换到场景: ", target_scene_name) _teleport_player() func _teleport_player() -> void: # 如果设置了目标位置,则传递给 SceneManager if target_position != Vector2.ZERO: SceneManager.set_next_scene_position(target_position) # 使用 SceneManager 切换场景 # 确保 SceneManager 已经注册了相关场景路径 SceneManager.change_scene(target_scene_name)