diff --git a/_Core/managers/SceneManager.gd b/_Core/managers/SceneManager.gd index 8779748..74980e0 100644 --- a/_Core/managers/SceneManager.gd +++ b/_Core/managers/SceneManager.gd @@ -36,6 +36,7 @@ signal scene_change_started(scene_name: String) # 场景状态 var current_scene_name: String = "" # 当前场景名称 var is_changing_scene: bool = false # 是否正在切换场景 +var _next_scene_position: Variant = null # 下一个场景的初始位置 (Vector2 or null) # 场景路径映射表 # 将场景名称映射到实际的文件路径 @@ -47,7 +48,9 @@ var scene_paths: Dictionary = { "battle": "res://scenes/maps/battle_scene.tscn", # 战斗场景 - 战斗系统 "inventory": "res://scenes/ui/InventoryWindow.tscn", # 背包界面 "shop": "res://scenes/ui/ShopWindow.tscn", # 商店界面 - "settings": "res://scenes/ui/SettingsWindow.tscn" # 设置界面 + "settings": "res://scenes/ui/SettingsWindow.tscn", # 设置界面 + "room": "res://scenes/Maps/room.tscn", # 房间场景 + "square": "res://scenes/Maps/square.tscn" # 广场场景 } # ============ 生命周期方法 ============ @@ -134,6 +137,17 @@ func change_scene(scene_name: String, use_transition: bool = true): func get_current_scene_name() -> String: return current_scene_name +# 设置下一个场景的初始位置 +func set_next_scene_position(pos: Vector2) -> void: + _next_scene_position = pos + +# 获取并清除下一个场景的初始位置 +func get_next_scene_position() -> Variant: + var pos = _next_scene_position + _next_scene_position = null + return pos + + # ============ 场景注册方法 ============ # 注册新场景 diff --git a/scenes/Maps/door_teleport.gd b/scenes/Maps/door_teleport.gd new file mode 100644 index 0000000..c856d61 --- /dev/null +++ b/scenes/Maps/door_teleport.gd @@ -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) diff --git a/scenes/Maps/door_teleport.gd.uid b/scenes/Maps/door_teleport.gd.uid new file mode 100644 index 0000000..aede9b2 --- /dev/null +++ b/scenes/Maps/door_teleport.gd.uid @@ -0,0 +1 @@ +uid://3wghcufucve5 diff --git a/scenes/Maps/room.tscn b/scenes/Maps/room.tscn index beba6de..03d2577 100644 --- a/scenes/Maps/room.tscn +++ b/scenes/Maps/room.tscn @@ -1,6 +1,8 @@ -[gd_scene load_steps=4 format=4 uid="uid://npn1yjrhdwwx"] +[gd_scene load_steps=7 format=4 uid="uid://npn1yjrhdwwx"] [ext_resource type="Texture2D" uid="uid://bjcij2ncikeyw" path="res://assets/sprites/environment/room_512_384.png" id="1_gnxaf"] +[ext_resource type="PackedScene" uid="uid://b2f8e24plwqgj" path="res://scenes/characters/player.tscn" id="2_shs2d"] +[ext_resource type="Script" uid="uid://3wghcufucve5" path="res://scenes/Maps/door_teleport.gd" id="3_y0jqb"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_shs2d"] texture = ExtResource("1_gnxaf") @@ -666,8 +668,23 @@ texture = ExtResource("1_gnxaf") [sub_resource type="TileSet" id="TileSet_y0jqb"] sources/0 = SubResource("TileSetAtlasSource_shs2d") +[sub_resource type="RectangleShape2D" id="RectangleShape2D_pywo5"] +size = Vector2(68, 36) + [node name="Room" type="Node2D"] [node name="ground" type="TileMapLayer" parent="."] tile_map_data = PackedByteArray("AADw//L/AAAAAAEAAADw//P/AAAAAAIAAADw//T/AAAAAAMAAADw//X/AAAAAAQAAADw//b/AAAAAAUAAADw//f/AAAAAAYAAADw//j/AAAAAAcAAADw//n/AAAAAAgAAADw//r/AAAAAAkAAADw//v/AAAAAAoAAADw//z/AAAAAAsAAADw//3/AAAAAAwAAADw//7/AAAAAA0AAADw////AAAAAA4AAADw/wAAAAAAAA8AAADw/wEAAAAAABAAAADw/wIAAAAAABEAAADw/wMAAAAAABIAAADw/wQAAAAAABMAAADw/wUAAAAAABQAAADx//L/AAABAAEAAADx//P/AAABAAIAAADx//T/AAABAAMAAADx//X/AAABAAQAAADx//b/AAABAAUAAADx//f/AAABAAYAAADx//j/AAABAAcAAADx//n/AAABAAgAAADx//r/AAABAAkAAADx//v/AAABAAoAAADx//z/AAABAAsAAADx//3/AAABAAwAAADx//7/AAABAA0AAADx////AAABAA4AAADx/wAAAAABAA8AAADx/wEAAAABABAAAADx/wIAAAABABEAAADx/wMAAAABABIAAADx/wQAAAABABMAAADx/wUAAAABABQAAADy//L/AAACAAEAAADy//P/AAACAAIAAADy//T/AAACAAMAAADy//X/AAACAAQAAADy//b/AAACAAUAAADy//f/AAACAAYAAADy//j/AAACAAcAAADy//n/AAACAAgAAADy//r/AAACAAkAAADy//v/AAACAAoAAADy//z/AAACAAsAAADy//3/AAACAAwAAADy//7/AAACAA0AAADy////AAACAA4AAADy/wAAAAACAA8AAADy/wEAAAACABAAAADy/wIAAAACABEAAADy/wMAAAACABIAAADy/wQAAAACABMAAADy/wUAAAACABQAAADz//L/AAADAAEAAADz//P/AAADAAIAAADz//T/AAADAAMAAADz//X/AAADAAQAAADz//b/AAADAAUAAADz//f/AAADAAYAAADz//j/AAADAAcAAADz//n/AAADAAgAAADz//r/AAADAAkAAADz//v/AAADAAoAAADz//z/AAADAAsAAADz//3/AAADAAwAAADz//7/AAADAA0AAADz////AAADAA4AAADz/wAAAAADAA8AAADz/wEAAAADABAAAADz/wIAAAADABEAAADz/wMAAAADABIAAADz/wQAAAADABMAAADz/wUAAAADABQAAAD0//L/AAAEAAEAAAD0//P/AAAEAAIAAAD0//T/AAAEAAMAAAD0//X/AAAEAAQAAAD0//b/AAAEAAUAAAD0//f/AAAEAAYAAAD0//j/AAAEAAcAAAD0//n/AAAEAAgAAAD0//r/AAAEAAkAAAD0//v/AAAEAAoAAAD0//z/AAAEAAsAAAD0//3/AAAEAAwAAAD0//7/AAAEAA0AAAD0////AAAEAA4AAAD0/wAAAAAEAA8AAAD0/wEAAAAEABAAAAD0/wIAAAAEABEAAAD0/wMAAAAEABIAAAD0/wQAAAAEABMAAAD0/wUAAAAEABQAAAD1//L/AAAFAAEAAAD1//P/AAAFAAIAAAD1//T/AAAFAAMAAAD1//X/AAAFAAQAAAD1//b/AAAFAAUAAAD1//f/AAAFAAYAAAD1//j/AAAFAAcAAAD1//n/AAAFAAgAAAD1//r/AAAFAAkAAAD1//v/AAAFAAoAAAD1//z/AAAFAAsAAAD1//3/AAAFAAwAAAD1//7/AAAFAA0AAAD1////AAAFAA4AAAD1/wAAAAAFAA8AAAD1/wEAAAAFABAAAAD1/wIAAAAFABEAAAD1/wMAAAAFABIAAAD1/wQAAAAFABMAAAD1/wUAAAAFABQAAAD2//L/AAAGAAEAAAD2//P/AAAGAAIAAAD2//T/AAAGAAMAAAD2//X/AAAGAAQAAAD2//b/AAAGAAUAAAD2//f/AAAGAAYAAAD2//j/AAAGAAcAAAD2//n/AAAGAAgAAAD2//r/AAAGAAkAAAD2//v/AAAGAAoAAAD2//z/AAAGAAsAAAD2//3/AAAGAAwAAAD2//7/AAAGAA0AAAD2////AAAGAA4AAAD2/wAAAAAGAA8AAAD2/wEAAAAGABAAAAD2/wIAAAAGABEAAAD2/wMAAAAGABIAAAD2/wQAAAAGABMAAAD2/wUAAAAGABQAAAD3//L/AAAHAAEAAAD3//P/AAAHAAIAAAD3//T/AAAHAAMAAAD3//X/AAAHAAQAAAD3//b/AAAHAAUAAAD3//f/AAAHAAYAAAD3//j/AAAHAAcAAAD3//n/AAAHAAgAAAD3//r/AAAHAAkAAAD3//v/AAAHAAoAAAD3//z/AAAHAAsAAAD3//3/AAAHAAwAAAD3//7/AAAHAA0AAAD3////AAAHAA4AAAD3/wAAAAAHAA8AAAD3/wEAAAAHABAAAAD3/wIAAAAHABEAAAD3/wMAAAAHABIAAAD3/wQAAAAHABMAAAD3/wUAAAAHABQAAAD4//L/AAAIAAEAAAD4//P/AAAIAAIAAAD4//T/AAAIAAMAAAD4//X/AAAIAAQAAAD4//b/AAAIAAUAAAD4//f/AAAIAAYAAAD4//j/AAAIAAcAAAD4//n/AAAIAAgAAAD4//r/AAAIAAkAAAD4//v/AAAIAAoAAAD4//z/AAAIAAsAAAD4//3/AAAIAAwAAAD4//7/AAAIAA0AAAD4////AAAIAA4AAAD4/wAAAAAIAA8AAAD4/wEAAAAIABAAAAD4/wIAAAAIABEAAAD4/wMAAAAIABIAAAD4/wQAAAAIABMAAAD4/wUAAAAIABQAAAD5//L/AAAJAAEAAAD5//P/AAAJAAIAAAD5//T/AAAJAAMAAAD5//X/AAAJAAQAAAD5//b/AAAJAAUAAAD5//f/AAAJAAYAAAD5//j/AAAJAAcAAAD5//n/AAAJAAgAAAD5//r/AAAJAAkAAAD5//v/AAAJAAoAAAD5//z/AAAJAAsAAAD5//3/AAAJAAwAAAD5//7/AAAJAA0AAAD5////AAAJAA4AAAD5/wAAAAAJAA8AAAD5/wEAAAAJABAAAAD5/wIAAAAJABEAAAD5/wMAAAAJABIAAAD5/wQAAAAJABMAAAD5/wUAAAAJABQAAAD6//L/AAAKAAEAAAD6//P/AAAKAAIAAAD6//T/AAAKAAMAAAD6//X/AAAKAAQAAAD6//b/AAAKAAUAAAD6//f/AAAKAAYAAAD6//j/AAAKAAcAAAD6//n/AAAKAAgAAAD6//r/AAAKAAkAAAD6//v/AAAKAAoAAAD6//z/AAAKAAsAAAD6//3/AAAKAAwAAAD6//7/AAAKAA0AAAD6////AAAKAA4AAAD6/wAAAAAKAA8AAAD6/wEAAAAKABAAAAD6/wIAAAAKABEAAAD6/wMAAAAKABIAAAD6/wQAAAAKABMAAAD6/wUAAAAKABQAAAD7//L/AAALAAEAAAD7//P/AAALAAIAAAD7//T/AAALAAMAAAD7//X/AAALAAQAAAD7//b/AAALAAUAAAD7//f/AAALAAYAAAD7//j/AAALAAcAAAD7//n/AAALAAgAAAD7//r/AAALAAkAAAD7//v/AAALAAoAAAD7//z/AAALAAsAAAD7//3/AAALAAwAAAD7//7/AAALAA0AAAD7////AAALAA4AAAD7/wAAAAALAA8AAAD7/wEAAAALABAAAAD7/wIAAAALABEAAAD7/wMAAAALABIAAAD7/wQAAAALABMAAAD7/wUAAAALABQAAAD8//L/AAAMAAEAAAD8//P/AAAMAAIAAAD8//T/AAAMAAMAAAD8//X/AAAMAAQAAAD8//b/AAAMAAUAAAD8//f/AAAMAAYAAAD8//j/AAAMAAcAAAD8//n/AAAMAAgAAAD8//r/AAAMAAkAAAD8//v/AAAMAAoAAAD8//z/AAAMAAsAAAD8//3/AAAMAAwAAAD8//7/AAAMAA0AAAD8////AAAMAA4AAAD8/wAAAAAMAA8AAAD8/wEAAAAMABAAAAD8/wIAAAAMABEAAAD8/wMAAAAMABIAAAD8/wQAAAAMABMAAAD8/wUAAAAMABQAAAD9//L/AAANAAEAAAD9//P/AAANAAIAAAD9//T/AAANAAMAAAD9//X/AAANAAQAAAD9//b/AAANAAUAAAD9//f/AAANAAYAAAD9//j/AAANAAcAAAD9//n/AAANAAgAAAD9//r/AAANAAkAAAD9//v/AAANAAoAAAD9//z/AAANAAsAAAD9//3/AAANAAwAAAD9//7/AAANAA0AAAD9////AAANAA4AAAD9/wAAAAANAA8AAAD9/wEAAAANABAAAAD9/wIAAAANABEAAAD9/wMAAAANABIAAAD9/wQAAAANABMAAAD9/wUAAAANABQAAAD9/wYAAAANABUAAAD9/wcAAAANABYAAAD9/wgAAAANABcAAAD+//L/AAAOAAEAAAD+//P/AAAOAAIAAAD+//T/AAAOAAMAAAD+//X/AAAOAAQAAAD+//b/AAAOAAUAAAD+//f/AAAOAAYAAAD+//j/AAAOAAcAAAD+//n/AAAOAAgAAAD+//r/AAAOAAkAAAD+//v/AAAOAAoAAAD+//z/AAAOAAsAAAD+//3/AAAOAAwAAAD+//7/AAAOAA0AAAD+////AAAOAA4AAAD+/wAAAAAOAA8AAAD+/wEAAAAOABAAAAD+/wIAAAAOABEAAAD+/wMAAAAOABIAAAD+/wQAAAAOABMAAAD+/wUAAAAOABQAAAD+/wYAAAAOABUAAAD+/wcAAAAOABYAAAD+/wgAAAAOABcAAAD///L/AAAPAAEAAAD///P/AAAPAAIAAAD///T/AAAPAAMAAAD///X/AAAPAAQAAAD///b/AAAPAAUAAAD///f/AAAPAAYAAAD///j/AAAPAAcAAAD///n/AAAPAAgAAAD///r/AAAPAAkAAAD///v/AAAPAAoAAAD///z/AAAPAAsAAAD///3/AAAPAAwAAAD///7/AAAPAA0AAAD/////AAAPAA4AAAD//wAAAAAPAA8AAAD//wEAAAAPABAAAAD//wIAAAAPABEAAAD//wMAAAAPABIAAAD//wQAAAAPABMAAAD//wUAAAAPABQAAAD//wYAAAAPABUAAAD//wcAAAAPABYAAAD//wgAAAAPABcAAAAAAPL/AAAQAAEAAAAAAPP/AAAQAAIAAAAAAPT/AAAQAAMAAAAAAPX/AAAQAAQAAAAAAPb/AAAQAAUAAAAAAPf/AAAQAAYAAAAAAPj/AAAQAAcAAAAAAPn/AAAQAAgAAAAAAPr/AAAQAAkAAAAAAPv/AAAQAAoAAAAAAPz/AAAQAAsAAAAAAP3/AAAQAAwAAAAAAP7/AAAQAA0AAAAAAP//AAAQAA4AAAAAAAAAAAAQAA8AAAAAAAEAAAAQABAAAAAAAAIAAAAQABEAAAAAAAMAAAAQABIAAAAAAAQAAAAQABMAAAAAAAUAAAAQABQAAAAAAAYAAAAQABUAAAAAAAcAAAAQABYAAAAAAAgAAAAQABcAAAABAPL/AAARAAEAAAABAPP/AAARAAIAAAABAPT/AAARAAMAAAABAPX/AAARAAQAAAABAPb/AAARAAUAAAABAPf/AAARAAYAAAABAPj/AAARAAcAAAABAPn/AAARAAgAAAABAPr/AAARAAkAAAABAPv/AAARAAoAAAABAPz/AAARAAsAAAABAP3/AAARAAwAAAABAP7/AAARAA0AAAABAP//AAARAA4AAAABAAAAAAARAA8AAAABAAEAAAARABAAAAABAAIAAAARABEAAAABAAMAAAARABIAAAABAAQAAAARABMAAAABAAUAAAARABQAAAABAAYAAAARABUAAAABAAcAAAARABYAAAABAAgAAAARABcAAAACAPL/AAASAAEAAAACAPP/AAASAAIAAAACAPT/AAASAAMAAAACAPX/AAASAAQAAAACAPb/AAASAAUAAAACAPf/AAASAAYAAAACAPj/AAASAAcAAAACAPn/AAASAAgAAAACAPr/AAASAAkAAAACAPv/AAASAAoAAAACAPz/AAASAAsAAAACAP3/AAASAAwAAAACAP7/AAASAA0AAAACAP//AAASAA4AAAACAAAAAAASAA8AAAACAAEAAAASABAAAAACAAIAAAASABEAAAACAAMAAAASABIAAAACAAQAAAASABMAAAACAAUAAAASABQAAAACAAYAAAASABUAAAACAAcAAAASABYAAAACAAgAAAASABcAAAADAPL/AAATAAEAAAADAPP/AAATAAIAAAADAPT/AAATAAMAAAADAPX/AAATAAQAAAADAPb/AAATAAUAAAADAPf/AAATAAYAAAADAPj/AAATAAcAAAADAPn/AAATAAgAAAADAPr/AAATAAkAAAADAPv/AAATAAoAAAADAPz/AAATAAsAAAADAP3/AAATAAwAAAADAP7/AAATAA0AAAADAP//AAATAA4AAAADAAAAAAATAA8AAAADAAEAAAATABAAAAADAAIAAAATABEAAAADAAMAAAATABIAAAADAAQAAAATABMAAAADAAUAAAATABQAAAAEAPL/AAAUAAEAAAAEAPP/AAAUAAIAAAAEAPT/AAAUAAMAAAAEAPX/AAAUAAQAAAAEAPb/AAAUAAUAAAAEAPf/AAAUAAYAAAAEAPj/AAAUAAcAAAAEAPn/AAAUAAgAAAAEAPr/AAAUAAkAAAAEAPv/AAAUAAoAAAAEAPz/AAAUAAsAAAAEAP3/AAAUAAwAAAAEAP7/AAAUAA0AAAAEAP//AAAUAA4AAAAEAAAAAAAUAA8AAAAEAAEAAAAUABAAAAAEAAIAAAAUABEAAAAEAAMAAAAUABIAAAAEAAQAAAAUABMAAAAEAAUAAAAUABQAAAAFAPL/AAAVAAEAAAAFAPP/AAAVAAIAAAAFAPT/AAAVAAMAAAAFAPX/AAAVAAQAAAAFAPb/AAAVAAUAAAAFAPf/AAAVAAYAAAAFAPj/AAAVAAcAAAAFAPn/AAAVAAgAAAAFAPr/AAAVAAkAAAAFAPv/AAAVAAoAAAAFAPz/AAAVAAsAAAAFAP3/AAAVAAwAAAAFAP7/AAAVAA0AAAAFAP//AAAVAA4AAAAFAAAAAAAVAA8AAAAFAAEAAAAVABAAAAAFAAIAAAAVABEAAAAFAAMAAAAVABIAAAAFAAQAAAAVABMAAAAFAAUAAAAVABQAAAAGAPL/AAAWAAEAAAAGAPP/AAAWAAIAAAAGAPT/AAAWAAMAAAAGAPX/AAAWAAQAAAAGAPb/AAAWAAUAAAAGAPf/AAAWAAYAAAAGAPj/AAAWAAcAAAAGAPn/AAAWAAgAAAAGAPr/AAAWAAkAAAAGAPv/AAAWAAoAAAAGAPz/AAAWAAsAAAAGAP3/AAAWAAwAAAAGAP7/AAAWAA0AAAAGAP//AAAWAA4AAAAGAAAAAAAWAA8AAAAGAAEAAAAWABAAAAAGAAIAAAAWABEAAAAGAAMAAAAWABIAAAAGAAQAAAAWABMAAAAGAAUAAAAWABQAAAAHAPL/AAAXAAEAAAAHAPP/AAAXAAIAAAAHAPT/AAAXAAMAAAAHAPX/AAAXAAQAAAAHAPb/AAAXAAUAAAAHAPf/AAAXAAYAAAAHAPj/AAAXAAcAAAAHAPn/AAAXAAgAAAAHAPr/AAAXAAkAAAAHAPv/AAAXAAoAAAAHAPz/AAAXAAsAAAAHAP3/AAAXAAwAAAAHAP7/AAAXAA0AAAAHAP//AAAXAA4AAAAHAAAAAAAXAA8AAAAHAAEAAAAXABAAAAAHAAIAAAAXABEAAAAHAAMAAAAXABIAAAAHAAQAAAAXABMAAAAHAAUAAAAXABQAAAAIAPL/AAAYAAEAAAAIAPP/AAAYAAIAAAAIAPT/AAAYAAMAAAAIAPX/AAAYAAQAAAAIAPb/AAAYAAUAAAAIAPf/AAAYAAYAAAAIAPj/AAAYAAcAAAAIAPn/AAAYAAgAAAAIAPr/AAAYAAkAAAAIAPv/AAAYAAoAAAAIAPz/AAAYAAsAAAAIAP3/AAAYAAwAAAAIAP7/AAAYAA0AAAAIAP//AAAYAA4AAAAIAAAAAAAYAA8AAAAIAAEAAAAYABAAAAAIAAIAAAAYABEAAAAIAAMAAAAYABIAAAAIAAQAAAAYABMAAAAIAAUAAAAYABQAAAAJAPL/AAAZAAEAAAAJAPP/AAAZAAIAAAAJAPT/AAAZAAMAAAAJAPX/AAAZAAQAAAAJAPb/AAAZAAUAAAAJAPf/AAAZAAYAAAAJAPj/AAAZAAcAAAAJAPn/AAAZAAgAAAAJAPr/AAAZAAkAAAAJAPv/AAAZAAoAAAAJAPz/AAAZAAsAAAAJAP3/AAAZAAwAAAAJAP7/AAAZAA0AAAAJAP//AAAZAA4AAAAJAAAAAAAZAA8AAAAJAAEAAAAZABAAAAAJAAIAAAAZABEAAAAJAAMAAAAZABIAAAAJAAQAAAAZABMAAAAJAAUAAAAZABQAAAAKAPL/AAAaAAEAAAAKAPP/AAAaAAIAAAAKAPT/AAAaAAMAAAAKAPX/AAAaAAQAAAAKAPb/AAAaAAUAAAAKAPf/AAAaAAYAAAAKAPj/AAAaAAcAAAAKAPn/AAAaAAgAAAAKAPr/AAAaAAkAAAAKAPv/AAAaAAoAAAAKAPz/AAAaAAsAAAAKAP3/AAAaAAwAAAAKAP7/AAAaAA0AAAAKAP//AAAaAA4AAAAKAAAAAAAaAA8AAAAKAAEAAAAaABAAAAAKAAIAAAAaABEAAAAKAAMAAAAaABIAAAAKAAQAAAAaABMAAAAKAAUAAAAaABQAAAALAPL/AAAbAAEAAAALAPP/AAAbAAIAAAALAPT/AAAbAAMAAAALAPX/AAAbAAQAAAALAPb/AAAbAAUAAAALAPf/AAAbAAYAAAALAPj/AAAbAAcAAAALAPn/AAAbAAgAAAALAPr/AAAbAAkAAAALAPv/AAAbAAoAAAALAPz/AAAbAAsAAAALAP3/AAAbAAwAAAALAP7/AAAbAA0AAAALAP//AAAbAA4AAAALAAAAAAAbAA8AAAALAAEAAAAbABAAAAALAAIAAAAbABEAAAALAAMAAAAbABIAAAALAAQAAAAbABMAAAALAAUAAAAbABQAAAAMAPL/AAAcAAEAAAAMAPP/AAAcAAIAAAAMAPT/AAAcAAMAAAAMAPX/AAAcAAQAAAAMAPb/AAAcAAUAAAAMAPf/AAAcAAYAAAAMAPj/AAAcAAcAAAAMAPn/AAAcAAgAAAAMAPr/AAAcAAkAAAAMAPv/AAAcAAoAAAAMAPz/AAAcAAsAAAAMAP3/AAAcAAwAAAAMAP7/AAAcAA0AAAAMAP//AAAcAA4AAAAMAAAAAAAcAA8AAAAMAAEAAAAcABAAAAAMAAIAAAAcABEAAAAMAAMAAAAcABIAAAAMAAQAAAAcABMAAAAMAAUAAAAcABQAAAANAPL/AAAdAAEAAAANAPP/AAAdAAIAAAANAPT/AAAdAAMAAAANAPX/AAAdAAQAAAANAPb/AAAdAAUAAAANAPf/AAAdAAYAAAANAPj/AAAdAAcAAAANAPn/AAAdAAgAAAANAPr/AAAdAAkAAAANAPv/AAAdAAoAAAANAPz/AAAdAAsAAAANAP3/AAAdAAwAAAANAP7/AAAdAA0AAAANAP//AAAdAA4AAAANAAAAAAAdAA8AAAANAAEAAAAdABAAAAANAAIAAAAdABEAAAANAAMAAAAdABIAAAANAAQAAAAdABMAAAANAAUAAAAdABQAAAAOAPL/AAAeAAEAAAAOAPP/AAAeAAIAAAAOAPT/AAAeAAMAAAAOAPX/AAAeAAQAAAAOAPb/AAAeAAUAAAAOAPf/AAAeAAYAAAAOAPj/AAAeAAcAAAAOAPn/AAAeAAgAAAAOAPr/AAAeAAkAAAAOAPv/AAAeAAoAAAAOAPz/AAAeAAsAAAAOAP3/AAAeAAwAAAAOAP7/AAAeAA0AAAAOAP//AAAeAA4AAAAOAAAAAAAeAA8AAAAOAAEAAAAeABAAAAAOAAIAAAAeABEAAAAOAAMAAAAeABIAAAAOAAQAAAAeABMAAAAOAAUAAAAeABQAAAAPAPL/AAAfAAEAAAAPAPP/AAAfAAIAAAAPAPT/AAAfAAMAAAAPAPX/AAAfAAQAAAAPAPb/AAAfAAUAAAAPAPf/AAAfAAYAAAAPAPj/AAAfAAcAAAAPAPn/AAAfAAgAAAAPAPr/AAAfAAkAAAAPAPv/AAAfAAoAAAAPAPz/AAAfAAsAAAAPAP3/AAAfAAwAAAAPAP7/AAAfAA0AAAAPAP//AAAfAA4AAAAPAAAAAAAfAA8AAAAPAAEAAAAfABAAAAAPAAIAAAAfABEAAAAPAAMAAAAfABIAAAAPAAQAAAAfABMAAAAPAAUAAAAfABQAAAA=") tile_set = SubResource("TileSet_y0jqb") + +[node name="Player" parent="." instance=ExtResource("2_shs2d")] +position = Vector2(-1, 89) + +[node name="DoorArea" type="Area2D" parent="."] +script = ExtResource("3_y0jqb") +target_scene_name = "square" +target_position = Vector2(647, 32) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="DoorArea"] +position = Vector2(2, 127) +shape = SubResource("RectangleShape2D_pywo5") diff --git a/scenes/Maps/square.tscn b/scenes/Maps/square.tscn index 62d563c..58b31d9 100644 --- a/scenes/Maps/square.tscn +++ b/scenes/Maps/square.tscn @@ -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") diff --git a/scenes/characters/player.gd b/scenes/characters/player.gd index 9e21864..0b4985d 100644 --- a/scenes/characters/player.gd +++ b/scenes/characters/player.gd @@ -13,9 +13,17 @@ const MOVE_SPEED = 200.0 var last_direction := "down" func _ready() -> void: + # 检查是否有初始位置设置 + call_deferred("_check_spawn_position") + # 播放初始动画 if animation_player.has_animation("idle"): animation_player.play("idle") + +func _check_spawn_position() -> void: + var spawn_pos = SceneManager.get_next_scene_position() + if spawn_pos != null: + global_position = spawn_pos func _physics_process(delta: float) -> void: _handle_movement(delta) diff --git a/scenes/characters/player.tscn b/scenes/characters/player.tscn index 88acbd7..24bf2a1 100644 --- a/scenes/characters/player.tscn +++ b/scenes/characters/player.tscn @@ -1,10 +1,10 @@ [gd_scene load_steps=13 format=3 uid="uid://b2f8e24plwqgj"] [ext_resource type="Script" uid="uid://btka26hrcvgen" path="res://Scenes/characters/player.gd" id="1_script"] -[ext_resource type="Texture2D" uid="uid://dpym0k5vurobw" path="res://assets/characters/player_spritesheet.png" id="2_texture"] +[ext_resource type="Texture2D" uid="uid://cghab1hkx5lg5" path="res://assets/characters/player_spritesheet.png" id="2_texture"] [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_1"] -radius = 16.0 +radius = 21.0 height = 48.0 [sub_resource type="Animation" id="Animation_idle_down"] @@ -145,14 +145,14 @@ tracks/0/keys = { [sub_resource type="AnimationLibrary" id="AnimationLibrary_1"] _data = { -"idle_down": SubResource("Animation_idle_down"), -"idle_left": SubResource("Animation_idle_left"), -"idle_right": SubResource("Animation_idle_right"), -"idle_up": SubResource("Animation_idle_up"), -"walk_down": SubResource("Animation_walk_down"), -"walk_left": SubResource("Animation_walk_left"), -"walk_right": SubResource("Animation_walk_right"), -"walk_up": SubResource("Animation_walk_up") +&"idle_down": SubResource("Animation_idle_down"), +&"idle_left": SubResource("Animation_idle_left"), +&"idle_right": SubResource("Animation_idle_right"), +&"idle_up": SubResource("Animation_idle_up"), +&"walk_down": SubResource("Animation_walk_down"), +&"walk_left": SubResource("Animation_walk_left"), +&"walk_right": SubResource("Animation_walk_right"), +&"walk_up": SubResource("Animation_walk_up") } [node name="Player" type="CharacterBody2D"] @@ -160,18 +160,17 @@ script = ExtResource("1_script") [node name="Sprite2D" type="Sprite2D" parent="."] position = Vector2(1.5000005, -24.5) -scale = Vector2(1, 1) texture = ExtResource("2_texture") hframes = 4 vframes = 4 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(0, -24) +position = Vector2(2, -24) shape = SubResource("CapsuleShape2D_1") [node name="AnimationPlayer" type="AnimationPlayer" parent="."] libraries = { -"": SubResource("AnimationLibrary_1") +&"": SubResource("AnimationLibrary_1") } [node name="Camera2D" type="Camera2D" parent="."]