第一步
首先创建一个新的场景叫做BaseLevel,并在新的场景中将主场景的TileMap, Player, GameCamera合并到新的基础场景中。并为BaseLevel结点添加一个脚本控件。
第二步
删除原先场景的所有子节点
第三步
在BaseLevel.gd中添加以下代码即可:
extends Node
var playerScene = preload("res://scenes/Player.tscn")
var spawnPosition = Vector2.ZERO
var currentPlayerNode = null
func _ready():
spawnPosition = $Player.global_position
register_player($Player)
func register_player(player):
# 注册新的玩家
currentPlayerNode = player
currentPlayerNode.connect("died", self, "on_player_died", [], CONNECT_DEFERRED) # 让玩家的死亡连接到本脚本中
# 监听玩家的死亡并创建新场景
func create_player():
var playerInstance = playerScene.instance()
add_child_below_node(currentPlayerNode, playerInstance) # 创建新的玩家实例,并将放到场景树原先应有的位置上
playerInstance.global_position = spawnPosition
register_player(playerInstance) # 注册新的玩家实例作为当前的玩家实例
func on_player_died():
currentPlayerNode.queue_free() # 首先删除当前的玩家
create_player() # 然后创建新的玩家