如何在Garry's mod中从文件夹中选择随机的.wav/.mp3文件?

最近我开始编写一个程序,它能够替换 Source 引擎游戏 Garry's Mod 中默认目录下的音效。

以下是当前的代码:

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

我想要发出多个 .wav音效,而又不会重叠,并且能在随机选择。

我在网络上没有找到任何有用的 Source 资料,所以我求助于 Stack Overflow。 我将非常感谢您的帮助。

点赞
用户3306144
用户3306144

你需要参考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-20 10:09:20