From d8fafcf52aa5d482087e4b41e91bf0a369bd9bfa 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: Sat, 15 Nov 2025 07:33:06 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=A4=9A=E4=BA=BA=E6=B8=B8=E6=88=8F):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=8E=A9=E5=AE=B6=E5=AE=9E=E4=BD=93=E4=B8=8E?= =?UTF-8?q?UI=E7=8A=B6=E6=80=81=E5=90=8C=E6=AD=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复多人游戏中玩家实体与UI状态不同步的问题,现在当玩家名称匹配时会自动设置UIState.player 移除单机游戏中重复设置UIState.player的代码 为WorldManager添加对象解析功能以支持多人游戏中的对象传输 --- scripts/Contents/Panels/Starter.gd | 1 - scripts/Statemachine/EntityBase.gd | 2 ++ scripts/Tools/ArrayTool.gd | 26 +++++++++++++++++--------- scripts/Tools/Managers/WorldManager.gd | 6 +++++- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index 3ce0920..cb71bb9 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -63,7 +63,6 @@ func startMultiplayerGame(): func startSingleplayerGame(): MultiplayerState.isMultiplayer = false EntityBase.generatePlayer(playerNameInput.text) - UIState.player = EntityBase.findPlayer(playerNameInput.text) WorldManager.rootNode.spawnWave() UIState.closeCurrentPanel() diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 59224a1..898b344 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -117,6 +117,8 @@ func _ready(): statebar = selfStatebar statebar.entity = self if isPlayer(): + if displayName == MultiplayerState.playerName: + UIState.player = self for i in weaponStore.get_children(): i.hide() weapons.append(i) diff --git a/scripts/Tools/ArrayTool.gd b/scripts/Tools/ArrayTool.gd index 793ad20..5927f5a 100644 --- a/scripts/Tools/ArrayTool.gd +++ b/scripts/Tools/ArrayTool.gd @@ -1,13 +1,21 @@ class_name ArrayTool static func removeAll(array: Array, value) -> Array: - var result = [] - for item in array: - if item != value: - result.append(item) - return result + var result = [] + for item in array: + if item != value: + result.append(item) + return result static func swap(array: Array, a: int, b: int): - var temp = array[a] - array[a] = array[b] - array[b] = temp - return array + var temp = array[a] + array[a] = array[b] + array[b] = temp + return array +static func parseEncodedObject(arr: Array) -> Array: + var result = [] + for item in arr: + if item is EncodedObjectAsID: + result.append(instance_from_id(item.get_instance_id())) + else: + result.append(item) + return result diff --git a/scripts/Tools/Managers/WorldManager.gd b/scripts/Tools/Managers/WorldManager.gd index 6c564f1..69466f1 100644 --- a/scripts/Tools/Managers/WorldManager.gd +++ b/scripts/Tools/Managers/WorldManager.gd @@ -12,6 +12,7 @@ func _ready(): rootNode = self spawner = $%spawner ComponentManager.init() + spawner.spawn_function = justReturn func _physics_process(delta): runningTime += delta * 1000 if EntityBase.mobCount() == 0 and runningTime > 1000: @@ -29,9 +30,12 @@ func spawnWave(): func spawn(node: Node): if MultiplayerState.isMultiplayer: if multiplayer.is_server(): - spawner.spawn(node) + spawner.spawn([node]) else: add_child(node) +func justReturn(data): + print(ArrayTool.parseEncodedObject(data)) + return ArrayTool.parseEncodedObject(data)[0] static func getTime(): return runningTime