英文:
I need one message to be displayed out of 10. but it displays all 10 at the same time
问题
我正在使用Lua制作一个Roblox游戏。在游戏中,我想让玩家站在一个方块上,该方块会变成红色,并显示从10条消息中随机选择的一条消息。但是所有10条消息都被显示出来。
以下是您提供的代码的翻译部分:
local block = script.Parent
local originalColor = block.BrickColor
local messages = {
"消息 1",
"消息 2",
"消息 3",
"消息 4",
"消息 5",
"消息 6",
"消息 7",
"消息 8",
"消息 9",
"消息 10"
}
local function onTouched(part)
local humanoid = part.Parent:FindFirstChild("Humanoid")
if humanoid then
block.BrickColor = BrickColor.new("Bright red")
local text = Instance.new("BillboardGui", block)
text.Adornee = block
text.Size = UDim2.new(1, 0, 1, 0)
text.StudsOffset = Vector3.new(0, 2, 0)
local label = Instance.new("TextLabel", text)
label.Size = UDim2.new(1, 0, 1, 0)
label.Text = messages[math.random(#messages)]
label.TextSize = label.TextSize + 10
label.TextColor3 = Color3.new(1, 1, 1)
label.BackgroundTransparency = 1
wait(3)
block.BrickColor = originalColor
text:Destroy()
end
end
block.Touched:Connect(onTouched)
英文:
I am making a roblox game using lua. in it i want a player to stand on a block which will turn red and display a randomly chosen message from 10 messages. But all 10 messages are being displayed.
local block = script.Parent
local originalColor = block.BrickColor
local messages = {
"Message 1",
"Message 2",
"Message 3",
"Message 4",
"Message 5",
"Message 6",
"Message 7",
"Message 8",
"Message 9",
"Message 10"
}
local function onTouched(part)
local humanoid = part.Parent:FindFirstChild("Humanoid")
if humanoid then
block.BrickColor = BrickColor.new("Bright red")
local text = Instance.new("BillboardGui", block)
text.Adornee = block
text.Size = UDim2.new(1, 0, 1, 0)
text.StudsOffset = Vector3.new(0, 2, 0)
local label = Instance.new("TextLabel", text)
label.Size = UDim2.new(1, 0, 1, 0)
label.Text = messages[math.random(#messages)]
label.TextSize = label.TextSize + 10
label.TextColor3 = Color3.new(1, 1, 1)
label.BackgroundTransparency = 1
wait(3)
block.BrickColor = originalColor
text:Destroy()`your text`
end
end
block.Touched:Connect(onTouched)
答案1
得分: 1
以下是您要翻译的内容:
问题在于当您走过该部分时,触摸事件可能会多次触发。为了防止这种情况,您可以使用通常被称为“防抖”的方法,这可以防止事件过于频繁地触发。
通过检查防抖是否为假,可以防止事件在短时间内频繁触发。
local debounce = false
local function onTouched(part)
local humanoid = part.Parent:FindFirstChild("Humanoid")
if humanoid and not debounce then
block.BrickColor = BrickColor.new("Bright red")
local text = Instance.new("BillboardGui", block)
text.Adornee = block
text.Size = UDim2.new(1, 0, 1, 0)
text.StudsOffset = Vector3.new(0, 2, 0)
local label = Instance.new("TextLabel", text)
label.Size = UDim2.new(1, 0, 1, 0)
label.Text = messages[math.random(#messages)]
label.TextSize = label.TextSize + 10
label.TextColor3 = Color3.new(1, 1, 1)
label.BackgroundTransparency = 1
debounce = true
wait(3)
block.BrickColor = originalColor
text:Destroy()
debounce = false
end
end
英文:
The problem here is that as you walk over the part, the touched event can fire multiple times. To prevent this you can use something that is often called 'debounce' this prevents the event from being fired too often.
By checking if debounce is false, it prevents the event from being fired in quick succession.
local debounce = false
local function onTouched(part)
local humanoid = part.Parent:FindFirstChild("Humanoid")
if humanoid and not debounce then
block.BrickColor = BrickColor.new("Bright red")
local text = Instance.new("BillboardGui", block)
text.Adornee = block
text.Size = UDim2.new(1, 0, 1, 0)
text.StudsOffset = Vector3.new(0, 2, 0)
local label = Instance.new("TextLabel", text)
label.Size = UDim2.new(1, 0, 1, 0)
label.Text = messages[math.random(#messages)]
label.TextSize = label.TextSize + 10
label.TextColor3 = Color3.new(1, 1, 1)
label.BackgroundTransparency = 1
debounce = true
wait(3)
block.BrickColor = originalColor
text:Destroy()
debounce = false
end
end
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论