forked from moyin/whale-town-front
feat: 增加player从广场到房间互相跳转的动作逻辑
This commit is contained in:
32
scenes/Maps/door_teleport.gd
Normal file
32
scenes/Maps/door_teleport.gd
Normal 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)
|
||||
1
scenes/Maps/door_teleport.gd.uid
Normal file
1
scenes/Maps/door_teleport.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://3wghcufucve5
|
||||
File diff suppressed because one or more lines are too long
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user