Roblox Time Trial Obby计时器求助:无法实现0:00s格式
Roblox 计时闯关关卡 0:00s 格式计时器实现方案
核心实现思路
通过计算流逝时间的分钟和秒数,利用字符串格式化补零,实现分钟:秒数(两位)s的显示效果。以下是客户端实时显示和服务器成绩记录的完整代码示例:
客户端实时显示计时器(LocalScript)
将此脚本放在PlayerGui下的ScreenGui内,确保提前添加好用于显示的TextLabel(命名为TimerLabel):
local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Player = Players.LocalPlayer local TimerLabel = Player.PlayerGui.ScreenGui:WaitForChild("TimerLabel") local startTime = os.clock() -- 初始化计时起点 -- 每帧更新计时器(Heartbeat保证平滑) RunService.Heartbeat:Connect(function() local elapsed = os.clock() - startTime local mins = math.floor(elapsed / 60) local secs = math.floor(elapsed % 60) -- 格式化字符串:秒数不足两位自动补零 TimerLabel.Text = string.format("%d:%02ds", mins, secs) end)
关键细节说明
os.clock():提供高精度的CPU时间,比tick()更适合短时间计时场景string.format("%02d"):强制将秒数格式化为两位数字,例如5秒会显示为05- 若需要暂停/重置功能,可添加
isRunning布尔变量控制计时逻辑:local isRunning = true -- 暂停逻辑 function pauseTimer() isRunning = false end -- 重置逻辑 function resetTimer() startTime = os.clock() isRunning = true end -- 修改Heartbeat回调 RunService.Heartbeat:Connect(function() if not isRunning then return end -- 原有计时逻辑 end)
服务器端成绩记录(ServerScript)
若需要记录玩家的通关时间并格式化存储,可使用以下逻辑:
local Players = game:GetService("Players") Players.PlayerAdded:Connect(function(player) player.CharacterAdded:Connect(function(character) local humanoid = character:WaitForChild("Humanoid") local startTime = os.clock() -- 玩家死亡时重置计时 humanoid.Died:Connect(function() startTime = os.clock() end) -- 触碰终点触发成绩计算 local finishPart = workspace:WaitForChild("FinishPart") finishPart.Touched:Connect(function(hit) if hit.Parent == character then local elapsed = os.clock() - startTime local mins = math.floor(elapsed / 60) local secs = math.floor(elapsed % 60) local formattedTime = string.format("%d:%02ds", mins, secs) -- 这里可添加DataStore存储逻辑,保存玩家的最好成绩 print(string.format("%s 通关时间:%s", player.Name, formattedTime)) end end) end) end)
内容的提问来源于stack exchange,提问作者G4LC
相关产品推荐
相关产品推荐

