Add a level 2 scaffold and make the level-clear screen load the next level

level_clear.gd gained a next_level_scene export: empty reloads the current level, otherwise it changes to the given scene. Level 1 now points at res://scenes/level_2.tscn. level_2.tscn is an empty but complete level: background, three TileMapLayers wired to the same TileSet, player, HUD, death screen and level-clear screen, plus the empty prefab containers. Its hidden_passages script explicitly sets hidden_cells = [] so level 1's passage cells are not carved here.
This commit is contained in:
2026-10-07 21:10:25 +08:00
parent 7c78a088a0
commit 81ffe989f6
6 changed files with 101 additions and 3 deletions
+88
View File
@@ -0,0 +1,88 @@
[gd_scene load_steps=9 format=3]
[ext_resource type="Texture2D" path="res://assets/game/backgrounds/cloud_left.png" id="1_cloud1"]
[ext_resource type="Texture2D" path="res://assets/game/backgrounds/cloud_trees.png" id="2_cloud2"]
[ext_resource type="Texture2D" path="res://assets/game/backgrounds/cloud_hills.png" id="3_cloud3"]
[ext_resource type="Texture2D" path="res://assets/game/backgrounds/cloud_right.png" id="4_cloud4"]
[ext_resource type="TileSet" path="res://assets/game/tilesets/kenney_terrain_tileset.tres" id="5_tileset"]
[ext_resource type="PackedScene" path="res://scenes/player.tscn" id="6_player"]
[ext_resource type="PackedScene" path="res://scenes/hud.tscn" id="7_hud"]
[ext_resource type="PackedScene" path="res://scenes/death_screen.tscn" id="8_death"]
[ext_resource type="PackedScene" path="res://scenes/level_clear.tscn" id="9_clear"]
[ext_resource type="Script" path="res://scripts/hidden_passages.gd" id="10_hidden"]
[node name="Main" type="Node2D"]
[node name="HUD" parent="." instance=ExtResource("7_hud")]
[node name="DeathScreen" parent="." instance=ExtResource("8_death")]
[node name="LevelClear" parent="." instance=ExtResource("9_clear")]
[node name="Level" type="Node2D" parent="."]
[node name="Background" type="Node2D" parent="Level"]
[node name="SkyColor" type="Polygon2D" parent="Level/Background"]
z_index = -30
color = Color(0.8509804, 0.9411765, 0.9372549, 1)
polygon = PackedVector2Array(0, 0, 468, 0, 468, 270, 0, 270)
[node name="CloudBand_01" type="Sprite2D" parent="Level/Background"]
z_index = -20
texture_filter = 1
position = Vector2(12, 150)
texture = ExtResource("1_cloud1")
[node name="CloudBand_02" type="Sprite2D" parent="Level/Background"]
z_index = -20
texture_filter = 1
position = Vector2(36, 150)
texture = ExtResource("2_cloud2")
[node name="CloudBand_03" type="Sprite2D" parent="Level/Background"]
z_index = -20
texture_filter = 1
position = Vector2(60, 150)
texture = ExtResource("3_cloud3")
[node name="CloudBand_04" type="Sprite2D" parent="Level/Background"]
z_index = -20
texture_filter = 1
position = Vector2(84, 150)
texture = ExtResource("4_cloud4")
[node name="TerrainTileMaps" type="Node2D" parent="Level"]
script = ExtResource("10_hidden")
hidden_cells = []
[node name="TerrainBase" type="TileMapLayer" parent="Level/TerrainTileMaps"]
position = Vector2(9, 9)
tile_set = ExtResource("5_tileset")
[node name="TerrainDetailsA" type="TileMapLayer" parent="Level/TerrainTileMaps"]
position = Vector2(9, 9)
z_index = 1
tile_set = ExtResource("5_tileset")
[node name="TerrainDetailsB" type="TileMapLayer" parent="Level/TerrainTileMaps"]
position = Vector2(9, 9)
z_index = 2
tile_set = ExtResource("5_tileset")
[node name="ActorsAndCharacters" type="Node2D" parent="Level"]
[node name="Player" parent="Level/ActorsAndCharacters" instance=ExtResource("6_player")]
position = Vector2(102, 132)
[node name="PrefabInstances" type="Node2D" parent="Level"]
[node name="Structures" type="Node2D" parent="Level/PrefabInstances"]
[node name="Hazards" type="Node2D" parent="Level/PrefabInstances"]
[node name="Interactables" type="Node2D" parent="Level/PrefabInstances"]
[node name="Collectibles" type="Node2D" parent="Level/PrefabInstances"]
[node name="Signs" type="Node2D" parent="Level/PrefabInstances"]
+1
View File
@@ -25,6 +25,7 @@
[node name="DeathScreen" parent="." unique_id=1952687359 instance=ExtResource("22_death")]
[node name="LevelClear" parent="." instance=ExtResource("26_clear")]
next_level_scene = "res://scenes/level_2.tscn"
[node name="Level" type="Node2D" parent="." unique_id=1678372922]
+1
View File
@@ -0,0 +1 @@
uid://dbjrrn5xe6nbh
+1
View File
@@ -0,0 +1 @@
uid://dr3fyoan8fwhj
+9 -3
View File
@@ -6,6 +6,9 @@ extends CanvasLayer
@export var fade_time: float = 0.8
@export var button_delay: float = 0.3
## 点「进入下一关」时加载哪个场景。
## 留空 = 重新加载本关;填 res://scenes/level_2.tscn 之类就跳到下一关。
@export_file("*.tscn") var next_level_scene: String = ""
var _fade: ColorRect = null
var _center: CenterContainer = null
@@ -29,6 +32,8 @@ func _ready() -> void:
_fade.color = Color(0.0, 0.0, 0.0, 0.0)
if _center != null:
_center.visible = false
if next_level_scene.is_empty() and _button != null:
_button.text = "重新开始 (R)"
func show_clear() -> void:
@@ -65,8 +70,9 @@ func _unhandled_input(event: InputEvent) -> void:
next_level()
## 目前项目里只有一关,所以"下一关"先做成重新加载本关。
## 以后真加了第二关,把这里换成 change_scene_to_file("res://scenes/level2.tscn") 即可。
func next_level() -> void:
get_tree().paused = false
get_tree().reload_current_scene()
if next_level_scene.is_empty():
get_tree().reload_current_scene()
else:
get_tree().change_scene_to_file(next_level_scene)
+1
View File
@@ -0,0 +1 @@
uid://cxfohn44nkm28