0

我最近开始编写一个程序,该程序将替换默认目录中的音效,在Source-Engine Game,Garry's Mod 中。

这是当前代码:

function GM:PlayerFootstep( ply, pos, foot, sound, volume, rf ) 
     ply:EmitSound("gear1")
     return true 
 end

我想发出多个.wav声音效果,它们不重叠,并且被随机选择。

我在 Internet 上没有找到任何有用的资源来提供帮助,所以我求助于 Stack Overflow。我将不胜感激有关该主题的帮助。

4

1 回答 1

0

您需要查看file.Find函数。

我建议有一个自定义文件夹,例如sound/customsteps/可以放置所有自定义声音的位置。我还建议使用.wav声音文件的格式,但其他一些确实有效(.mp3如果.ogg我没记错的话)。

在您的代码中,只需调用local snds=file.Find( "sound/customsteps/*", "GAME" )它为您提供一个表格,然后您可以简单地从列表中选择一个随机的,local snd=snds[math.random(1,#snds)]并像在上面的代码中一样播放它 - ply:EmitSound(snd)

确保在函数之外创建声音表GM:PlayerFootstep,以便它只运行一次。我还建议预先缓存所有声音。您可以通过遍历表并调用util.PrecacheSound(path)它们来做到这一点,如下所示:

for k,v in pairs(snds) do
    util.PrecacheSound(v)
end

因此,考虑到所有这些 - 您的最终代码应如下所示:

local snds=file.Find( "sound/customsteps/*", "GAME" )
for k,v in pairs(snds) do
    util.PrecacheSound(v)
end

function GM:PlayerFootstep( ply, pos, foot, sound, volume, rf ) 
    ply:EmitSound(snds[math.random(1,#snds)])
    return true
end

来源:个人经历

于 2015-04-20T10:09:20.377 回答