You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Roblox游戏Frame切换异常:回车无法跳转至下一Frame求助

问题分析与解决

核心问题

你当前代码里用NextButton.MouseButton1Click:Fire()触发Frame跳转,但这种写法的前提是NextButton已经绑定了切换Frame的MouseButton1Click事件处理逻辑。如果按钮本身没有对应的Frame切换代码,就算触发事件也不会有任何效果。

修复方案

直接在回车事件中编写Frame切换逻辑,不需要依赖按钮的点击事件,这样更可靠:

local NextButton = script.Parent
local ScreenGui = NextButton.Parent
local UsernameFrame = ScreenGui.Frame -- 第一个输入用户名的Frame
local MessageFrame = ScreenGui.MessageFrame -- 第二个输入消息的Frame(根据你的层级结构调整名称)
local UsernameTextBox = UsernameFrame.UsernameTextBox
local MessageTextBox = MessageFrame.MessageTextBox

-- NPC列表
local npcNames = {"ROBLOX", "Bacon", "builderman"}
-- 远程事件
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RemoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent")

-- 存储收件人,后续提交消息时调用
local recipient = nil

UsernameTextBox.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == Enum.KeyCode.Return then
        local username = UsernameTextBox.Text:Trim() -- 去除首尾空格,避免空输入误判
        
        if username == "" then
            -- 随机选择NPC作为收件人
            local randomIndex = math.random(1, #npcNames)
            recipient = npcNames[randomIndex]
            print("随机选择NPC收件人:", recipient)
        else
            recipient = username
            print("回车触发,切换到消息输入Frame")
        end
        
        -- 切换Frame:隐藏用户名Frame,显示消息Frame
        UsernameFrame.Visible = false
        MessageFrame.Visible = true
        -- 自动聚焦到消息输入框,优化操作体验
        MessageTextBox:CaptureFocus()
    end
end)

-- 消息提交逻辑(消息框按回车触发)
MessageTextBox.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == Enum.KeyCode.Return then
        local message = MessageTextBox.Text:Trim()
        if message == "" then return end -- 空消息不提交
        
        if table.find(npcNames, recipient) then
            -- 发送给NPC
            RemoteEvent:FireServer("SendMessageToNPC", message, recipient)
        else
            -- 发送给指定用户
            RemoteEvent:FireServer("SendMessageToUser", message, recipient)
        end
        
        -- 提交后重置UI
        MessageFrame.Visible = false
        UsernameFrame.Visible = true
        UsernameTextBox.Text = ""
        MessageTextBox.Text = ""
        recipient = nil
    end
end)

额外注意事项

  1. 层级名称核对:确保MessageFrame是你第二个Frame的实际名称,根据你的层级结构调整变量名。
  2. 空输入处理:用:Trim()去除用户名的首尾空格,避免用户输入空格被误判为有效用户名。
  3. 收件人存储:把收件人存在变量里,后续提交消息时直接使用,不需要重复获取。
  4. UI体验优化:切换Frame后自动聚焦到消息输入框,减少用户操作步骤。

内容的提问来源于stack exchange,提问作者Andrew N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:50:11