From c28d725d3e6dbb61e29fa21ebf51af4139152fdc 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: Sun, 9 Nov 2025 15:24:24 +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=E8=BF=9E=E6=8E=A5=E7=8A=B6=E6=80=81=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E5=92=8C=E6=96=AD=E5=BC=80=E8=BF=9E=E6=8E=A5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在MultiplayerState中添加isConnected方法检查连接状态 - 修改launchServer和connectClient方法以更新连接状态 - 在Starter面板中添加断开连接按钮并实现状态同步 - 更新UI显示连接状态和颜色 --- components/Scenes/FullscreenPanels/Starter.tscn | 10 +++++++++- scripts/Contents/Panels/Starter.gd | 2 ++ scripts/Tools/Managers/MultiplayerState.gd | 9 ++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/components/Scenes/FullscreenPanels/Starter.tscn b/components/Scenes/FullscreenPanels/Starter.tscn index 9698d6e..e7a0682 100644 --- a/components/Scenes/FullscreenPanels/Starter.tscn +++ b/components/Scenes/FullscreenPanels/Starter.tscn @@ -88,9 +88,10 @@ label_settings = SubResource("LabelSettings_lfxcn") [node name="connectionState" type="Label" parent="content/wrapper/starter/multiplayer/main" index="1"] unique_name_in_owner = true +modulate = Color(1, 0, 0, 1) layout_mode = 2 size_flags_horizontal = 4 -text = "状态:" +text = "状态:未连接到服务器。" label_settings = SubResource("LabelSettings_kl3ko") [node name="host" type="HBoxContainer" parent="content/wrapper/starter/multiplayer/main" index="2"] @@ -145,6 +146,13 @@ layout_mode = 2 size_flags_horizontal = 4 text = "连接服务器" +[node name="disconnectBtn" type="Button" parent="content/wrapper/starter/multiplayer/main/operation" index="2"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +disabled = true +text = "断开连接" + [node name="serverConfig" type="VBoxContainer" parent="content/wrapper/starter/multiplayer" index="1"] layout_mode = 2 alignment = 1 diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index 5d37c69..9c5b74c 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -10,6 +10,7 @@ extends FullscreenPanelBase @onready var connectBtn: Button = $"%connectBtn" @onready var maxPlayerInput: LineEdit = $"%maxPlayerInput" @onready var connectionState: Label = $"%connectionState" +@onready var disconnectBtn: Button = $"%disconnectBtn" func _ready(): diffEdit.min_value = GameRule.difficultyRange.x @@ -36,3 +37,4 @@ func setState(state: MultiplayerState.ConnectionState): MultiplayerState.state = state connectionState.text = "状态:%s" % MultiplayerState.stateTextMap[state] connectionState.modulate = MultiplayerState.stateColorMap[state] + disconnectBtn.disabled = not MultiplayerState.isConnected() diff --git a/scripts/Tools/Managers/MultiplayerState.gd b/scripts/Tools/Managers/MultiplayerState.gd index 69c4090..79ecda5 100644 --- a/scripts/Tools/Managers/MultiplayerState.gd +++ b/scripts/Tools/Managers/MultiplayerState.gd @@ -25,8 +25,15 @@ static var isMultiplayer: bool = false static var maxPlayer: int = 10 +static func isConnected(): + return [ConnectionState.CONNECTED_HOST, ConnectionState.CONNECTED_CLIENT].has(state) static func launchServer(port: int): - isMultiplayer = true var peer = ENetMultiplayerPeer.new() peer.create_server(port, maxPlayer) + state = ConnectionState.CONNECTED_HOST + return peer +static func connectClient(host: String, port: int): + var peer = ENetMultiplayerPeer.new() + peer.create_client(host, port) + state = ConnectionState.CONNECTED_CLIENT return peer