在本地播放 Roblox 上的音乐
Playing Music on Roblox locally
我的 Roblox 游戏中播放的本地音乐有点卡住了。
我在我的游戏中设置了一个脚本,其中一个脚本将 五个声音文件 插入到 玩家的 GUI 中。制作服务器时,这些声音确实会传到玩家 gui 中。
要播放声音,有部分设置会检查与玩家的碰撞,当他们检测到玩家时,他们将启动 中的 五种声音 之一玩家的 GUI.
其中一个部分的代码如下所示:
script.Parent.Touched:connect(function(hit)
if hit.Parent:FindFirstChild('Humanoid') then
if game.Players[hit.Parent.Name].PlayerGui.Sound2.TimePosition < 1 then
game.Players[hit.Parent.Name].PlayerGui.Sound2.Volume = 1
game.Players[hit.Parent.Name].PlayerGui.Sound2:Play()
game.Players[hit.Parent.Name].PlayerGui.Sound1:Stop()
game.Players[hit.Parent.Name].PlayerGui.Sound4:Stop()
game.Players[hit.Parent.Name].PlayerGui.Sound3:Stop()
game.Players[hit.Parent.Name].PlayerGui.Sound5:Stop()
end
end
end)
正如我所测试的那样,此脚本确实可以很好地检测玩家。该系统确实可以在 Roblox Studio 测试区运行,但是当使用它启动服务器时 none 会播放声音。
服务器确实将声音设置为正在播放,并且它们从服务器端在客户端显示为正在播放,但客户端并不认为它们正在播放并且它们不播放。
我确实启用了过滤功能,但这应该不会影响它...
我认为这很简单。我认为这是 SoundService 的一个功能。如果这不起作用,请纠正我,但我相信就是这样
soundobj = game.Players[hit.Parent.Name].PlayerGui.Sound2
game:GetService('SoundService'):PlayLocalSound(soundobj)
有关详细信息,请参阅 https://wiki.roblox.com/index.php?title=API:Class/SoundService/PlayLocalSound
一种方法是将声音作为 PlayerGui 的父级(我想你需要一个 ScreenGui),然后 :Play() 它们。
启用过滤是这不起作用的原因。
要解决此问题,您可以使用位于游戏 ReplicatedStorage 中的 RemoteEvent。
声音必须放在 StarterGUI 中,并且应该有一个包含以下代码的本地脚本:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local event = ReplicatedStorage:WaitForChild("REMOTE EVENT NAME")
script.Parent.Sound2.Playing = true
local function onNewPlayerFired(sound)
script.Parent.Sound1.Playing = false
script.Parent.Sound2.Playing = false
script.Parent.Sound3.Playing = false
script.Parent.Sound4.Playing = false
script.Parent.Sound5.Playing = false
script.Parent[sound].Playing = true
end
event.OnClientEvent:Connect(onNewPlayerFired)
在每个声音触发器部分应该有这样的代码:
local debounce = false
script.Parent.Touched:connect(function(hit)
if debounce == true then return end
debounce = true
if hit.Parent:FindFirstChild('Humanoid') then
local plr = game.Players:FindFirstChild(hit.Parent.Name)
game.ReplicatedStorage.REMOTE EVENT NAME:FireClient(plr,"SOUND NAME")
end
wait(2)
debounce = false
end)
我最近 运行 在制作音乐播放器时遇到了这个问题。它最终成为最愚蠢的事情,并且与 FE 息息相关。我的播放器在 Test Studio 工作,但给了我一整套错误代码清单,我只需将脚本更改为本地脚本即可修复这些错误代码。从字面上看,所有相同的代码都像在工作室中一样工作,但在客户端。我花了一整天的时间挠头和维基搜索来找出我的错误。 FE 最初对我来说是一场噩梦,但我开始喜欢它为我的游戏提供的安全性。 :)
我的 Roblox 游戏中播放的本地音乐有点卡住了。
我在我的游戏中设置了一个脚本,其中一个脚本将 五个声音文件 插入到 玩家的 GUI 中。制作服务器时,这些声音确实会传到玩家 gui 中。
要播放声音,有部分设置会检查与玩家的碰撞,当他们检测到玩家时,他们将启动 中的 五种声音 之一玩家的 GUI.
其中一个部分的代码如下所示:
script.Parent.Touched:connect(function(hit)
if hit.Parent:FindFirstChild('Humanoid') then
if game.Players[hit.Parent.Name].PlayerGui.Sound2.TimePosition < 1 then
game.Players[hit.Parent.Name].PlayerGui.Sound2.Volume = 1
game.Players[hit.Parent.Name].PlayerGui.Sound2:Play()
game.Players[hit.Parent.Name].PlayerGui.Sound1:Stop()
game.Players[hit.Parent.Name].PlayerGui.Sound4:Stop()
game.Players[hit.Parent.Name].PlayerGui.Sound3:Stop()
game.Players[hit.Parent.Name].PlayerGui.Sound5:Stop()
end
end
end)
正如我所测试的那样,此脚本确实可以很好地检测玩家。该系统确实可以在 Roblox Studio 测试区运行,但是当使用它启动服务器时 none 会播放声音。
服务器确实将声音设置为正在播放,并且它们从服务器端在客户端显示为正在播放,但客户端并不认为它们正在播放并且它们不播放。
我确实启用了过滤功能,但这应该不会影响它...
我认为这很简单。我认为这是 SoundService 的一个功能。如果这不起作用,请纠正我,但我相信就是这样
soundobj = game.Players[hit.Parent.Name].PlayerGui.Sound2
game:GetService('SoundService'):PlayLocalSound(soundobj)
有关详细信息,请参阅 https://wiki.roblox.com/index.php?title=API:Class/SoundService/PlayLocalSound
一种方法是将声音作为 PlayerGui 的父级(我想你需要一个 ScreenGui),然后 :Play() 它们。
启用过滤是这不起作用的原因。
要解决此问题,您可以使用位于游戏 ReplicatedStorage 中的 RemoteEvent。
声音必须放在 StarterGUI 中,并且应该有一个包含以下代码的本地脚本:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local event = ReplicatedStorage:WaitForChild("REMOTE EVENT NAME")
script.Parent.Sound2.Playing = true
local function onNewPlayerFired(sound)
script.Parent.Sound1.Playing = false
script.Parent.Sound2.Playing = false
script.Parent.Sound3.Playing = false
script.Parent.Sound4.Playing = false
script.Parent.Sound5.Playing = false
script.Parent[sound].Playing = true
end
event.OnClientEvent:Connect(onNewPlayerFired)
在每个声音触发器部分应该有这样的代码:
local debounce = false
script.Parent.Touched:connect(function(hit)
if debounce == true then return end
debounce = true
if hit.Parent:FindFirstChild('Humanoid') then
local plr = game.Players:FindFirstChild(hit.Parent.Name)
game.ReplicatedStorage.REMOTE EVENT NAME:FireClient(plr,"SOUND NAME")
end
wait(2)
debounce = false
end)
我最近 运行 在制作音乐播放器时遇到了这个问题。它最终成为最愚蠢的事情,并且与 FE 息息相关。我的播放器在 Test Studio 工作,但给了我一整套错误代码清单,我只需将脚本更改为本地脚本即可修复这些错误代码。从字面上看,所有相同的代码都像在工作室中一样工作,但在客户端。我花了一整天的时间挠头和维基搜索来找出我的错误。 FE 最初对我来说是一场噩梦,但我开始喜欢它为我的游戏提供的安全性。 :)