如何实现用多重音轨的方式播放音效

魔兽争霸3地图编辑器中,使用声音编辑器创建的音效变量实际上是一个单独的对象,重复播放一个正在播放的音效会使得这个音效重新播放而非再出现一个同时播放的音效。

但魔兽争霸3的源代码common.j里有相关的函数来实现多重音轨的播放,因此我基于common.j和Blizzard.j中提供的函数编写了如下的自定义函数来实现多音轨的音效播放:

function JustAnotherPlaySound takes string soundName, real volumePercent, real pitch returns nothing
  local sound soundHandle = CreateSound(soundName, false, false, true, 12700, 12700, "")
  call SetSoundVolumeBJ(soundHandle, volumePercent)
  call SetSoundPitch(soundHandle, pitch)
  // Set Volume or Pitch after StartSound is invalid for current playing sound.
  call StartSound(soundHandle)
  call KillSoundWhenDone(soundHandle)
  set bj_lastPlayedSound = soundHandle
endfunction

将上方自定义函数复制到你触发器左侧目录顶部的“自定义代码区”中,然后你就可以使用下方的Jass代码来播放互不冲突的音效了。

使用示例:

call JustAnotherPlaySound( "Sound\\Ambient\\DoodadEffects\\RollingThunder1.wav", 100, 1 )