From 9e0b713ef73c34ae42c6b814b92e915945fbe368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Fri, 14 Nov 2025 06:45:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=A4=9A=E4=BA=BA=E6=B8=B8=E6=88=8F):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=9A=E4=BA=BA=E6=B8=B8=E6=88=8F=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=99=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在World场景中添加MultiplayerSpawner节点 - 在WorldManager中实现spawn方法处理本地和多人游戏生成逻辑 - 移除EntityBase中不再需要的多人游戏同步代码 --- components/Scenes/World.tscn | 4 ++++ scripts/Statemachine/EntityBase.gd | 11 ----------- scripts/Tools/Managers/WorldManager.gd | 10 ++++++++++ 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/components/Scenes/World.tscn b/components/Scenes/World.tscn index c3015c7..464bfa1 100644 --- a/components/Scenes/World.tscn +++ b/components/Scenes/World.tscn @@ -72,6 +72,10 @@ texture_filter = 1 script = ExtResource("1_lxsxj") metadata/_edit_vertical_guides_ = [-1.0, 57.0] +[node name="spawner" type="MultiplayerSpawner" parent="."] +unique_name_in_owner = true +spawn_path = NodePath("..") + [node name="UI" parent="." instance=ExtResource("2_04cdd")] [node name="camera" type="Camera2D" parent="."] diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 55d6944..f07d059 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -105,7 +105,6 @@ var currentStage: int = 0 var spawnTime: float = 0 func _ready(): - multiplayer.multiplayer_peer = MultiplayerState.connection if useStatic: texture = texture.get_node("staticAnimation") spawnTime = WorldManager.getTime() @@ -181,13 +180,6 @@ func _physics_process(_delta: float) -> void: storeEnergy(randf_range(0.01, 0.05 + fields.get(FieldStore.Entity.ENERGY_REGENERATION) - 1), true) trailParticle.emitting = trailing -# 同步状态 -@rpc("any_peer") -func syncPosition(player: String, newPosition: Vector2, newVelocity: Vector2): - if player != displayName: return - position = newPosition - velocity = newVelocity - # 通用方法 func rebuildWeaponIcons(): if isPlayer(): @@ -224,9 +216,6 @@ func move(direction: Vector2, isSprinting: bool = false): var currentDirection = sign(direction.x) if currentDirection != 0: lastDirection = currentDirection - if MultiplayerState.isMultiplayer: - print("test") - syncPosition.rpc(displayName, position, velocity) func getSprintInitialDisplace(): return displace(velocity) * sprintMultiplier func getSprintProgress(): diff --git a/scripts/Tools/Managers/WorldManager.gd b/scripts/Tools/Managers/WorldManager.gd index 5e2e582..20324ca 100644 --- a/scripts/Tools/Managers/WorldManager.gd +++ b/scripts/Tools/Managers/WorldManager.gd @@ -5,10 +5,12 @@ static var rootNode: WorldManager static var tree: SceneTree static var runningTime: int = 0 static var peer: ENetMultiplayerPeer +static var spawner: MultiplayerSpawner func _ready(): tree = get_tree() rootNode = self + spawner = $%spawner ComponentManager.init() func _physics_process(delta): runningTime += delta * 1000 @@ -24,6 +26,14 @@ func spawnWave(): nextWave(waves) if MultiplayerState.isMultiplayer and multiplayer.is_server(): nextWave.rpc(waves) +func spawn(node: Node): + if MultiplayerState.isMultiplayer: + if multiplayer.is_server(): + spawner.spawn(node) + else: + add_child(node) static func getTime(): return runningTime +static func spawnNode(node: Node): + rootNode.spawn(node)