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:
@@ -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"]
|
||||
@@ -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]
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://dbjrrn5xe6nbh
|
||||
@@ -0,0 +1 @@
|
||||
uid://dr3fyoan8fwhj
|
||||
@@ -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)
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://cxfohn44nkm28
|
||||
Reference in New Issue
Block a user