feat: 增加player从广场到房间互相跳转的动作逻辑

This commit is contained in:
2026-01-10 00:44:01 +08:00
parent 4bfe49d5b1
commit 6a3823ad16
7 changed files with 98 additions and 16 deletions

View File

@@ -0,0 +1,32 @@
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)

View File

@@ -0,0 +1 @@
uid://3wghcufucve5

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=40 format=4 uid="uid://5cc0c6cpnhe8"]
[gd_scene load_steps=42 format=4 uid="uid://5cc0c6cpnhe8"]
[ext_resource type="Texture2D" uid="uid://baa5wkuyqouh6" path="res://assets/sprites/environment/standard_brick_128_128.jpg" id="1_rb5kq"]
[ext_resource type="Texture2D" uid="uid://dwlnclqw6lsa7" path="res://assets/sprites/environment/grass_256_256.png" id="2_dly5q"]
@@ -17,6 +17,7 @@
[ext_resource type="Texture2D" uid="uid://d3w3fncsm32oi" path="res://assets/sprites/environment/deck_384_167.png" id="13_tct6u"]
[ext_resource type="Texture2D" uid="uid://j0twhfkpj15i" path="res://assets/sprites/environment/deck_512_164.png" id="14_m4als"]
[ext_resource type="Texture2D" uid="uid://blre1srim52hs" path="res://assets/sprites/environment/deck_512_282.png" id="15_2rqka"]
[ext_resource type="Script" uid="uid://3wghcufucve5" path="res://scenes/Maps/door_teleport.gd" id="18_0xqio"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_7nixu"]
texture = ExtResource("1_rb5kq")
@@ -1380,6 +1381,9 @@ texture_region_size = Vector2i(32, 32)
tile_size = Vector2i(32, 32)
sources/0 = SubResource("TileSetAtlasSource_rixdf")
[sub_resource type="RectangleShape2D" id="RectangleShape2D_edt5w"]
size = Vector2(66, 56)
[node name="square" type="Node2D"]
[node name="ground" type="TileMapLayer" parent="."]
@@ -1414,3 +1418,10 @@ tile_map_data = PackedByteArray("AAAOAO//AAAAAAAAAAA=")
tile_set = SubResource("TileSet_u1t8b")
[node name="Player" parent="." instance=ExtResource("10_ho5ay")]
[node name="DoorArea" type="Area2D" parent="."]
script = ExtResource("18_0xqio")
[node name="CollisionShape2D" type="CollisionShape2D" parent="DoorArea"]
position = Vector2(647, -52)
shape = SubResource("RectangleShape2D_edt5w")