From bdc9201dba06988b94e08833d5a7214ed32b95b0 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: Tue, 11 Nov 2025 22:23:36 +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=E7=8E=A9=E5=AE=B6=E5=90=8D=E7=A7=B0=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E5=B9=B6=E4=BC=98=E5=8C=96=E5=A4=9A=E4=BA=BA=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在MultiplayerState中添加playerName静态变量用于存储玩家名称 修改Starter.gd中的startMultiplayerGame方法,保存玩家名称到MultiplayerState 优化EntityBase.gd的AI逻辑,仅当玩家名称匹配时才执行AI 移除不再需要的多人游戏同步方法 --- scripts/Contents/Panels/Starter.gd | 10 +++++----- scripts/Statemachine/EntityBase.gd | 22 +++++----------------- scripts/Tools/Managers/MultiplayerState.gd | 1 + 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index f858141..355d026 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -53,11 +53,11 @@ func rebuildAllPlayers(playerNames: Array[String]): addPlayerName(i) @rpc("any_peer") func startMultiplayerGame(): - if multiplayer.is_server(): - for i in getPlayerNames(): - EntityBase.generatePlayer(i) - Wave.next() - UIState.closeCurrentPanel() + MultiplayerState.playerName = playerNameInput.text + for i in getPlayerNames(): + EntityBase.generatePlayer(i) + Wave.next() + UIState.closeCurrentPanel() func _ready(): historyStack = Composables.useHistoryStack(playerNameInput) diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 5170b2e..94cb0f5 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -169,13 +169,16 @@ func _physics_process(_delta: float) -> void: else: velocity = Vector2.ZERO if (isPlayer() or is_instance_valid(currentFocusedBoss)) and not charginup and canRunAi: - ai() + if isPlayer(): + if MultiplayerState.playerName == displayName: + ai() + else: + ai() elif isSummon(): ai() move_and_slide() storeEnergy(randf_range(0.01, 0.05 + fields.get(FieldStore.Entity.ENERGY_REGENERATION) - 1), true) trailParticle.emitting = trailing - rpc("syncPosition", displayName, position) # 通用方法 func rebuildWeaponIcons(): @@ -394,21 +397,6 @@ func summon(who: PackedScene, syncFields: bool = true, lockValue: bool = true) - get_parent().add_child(instance) return instance -# 多人游戏数据同步 -@rpc("any_peer") -func syncPosition(player: String, newPosition: Vector2): - if player == displayName: - position = newPosition -@rpc("any_peer") -func syncHealth(player: String, newHealth: float): - if player == displayName: - health = newHealth - healthChanged.emit(health) -@rpc("any_peer") -func syncAttack(player: String, index: int): - if player == displayName: - tryAttack(index) - # 关于追踪 func getTrackingAnchor() -> Vector2: return hurtbox.get_node("hitbox").global_position diff --git a/scripts/Tools/Managers/MultiplayerState.gd b/scripts/Tools/Managers/MultiplayerState.gd index 5e19ac4..95cccfa 100644 --- a/scripts/Tools/Managers/MultiplayerState.gd +++ b/scripts/Tools/Managers/MultiplayerState.gd @@ -21,6 +21,7 @@ static var stateColorMap = { } static var state: ConnectionState = ConnectionState.DISCONNECTED +static var playerName: String static var maxPlayer: int = 10