1

我是法国人,很抱歉我的英语。

我目前正在使用 LWJGL 制作分屏 2D 游戏。我正在使用 LWJGL 提供的 openAL API。一切似乎都很完美。好吧,说实话太完美了:因为我正在制作分屏游戏并且因为我不能让 2 个听众共享相同的上下文,所以我想摆脱左/右平移。

声音衰减效果很好。我根据最近的播放器改变声音的位置。监听器不会改变,总是在 (0,0,0)。声音位置是(soundPosition - 最接近播放器位置)。

那么如何摆脱周围的东西呢?当然,我想保持声音随距离衰减。我可以根据距离简单地将声音放在 Z 轴上,但这似乎有点傻(每次我必须更新声音位置时,我都必须计算距离)。

谢谢 !

4

1 回答 1

1

当您计算声音的位置(soundPosition -closestPlayerPosition)时,取其返回的向量的长度,然后将该声音直接放在距玩家距离的 z 轴下方。

例子:

soundPosition = (1.4,0,1.4) 最近播放器位置 = (0,0,0)

soundDirection = soundPosition - 最近播放器位置 = (1.4,0,1.4)

soundDistance = soundDirection.Length()

最后,声音的最终位置:

finalSoundPosition = (0,0,soundDistance) = (0,0,2)

编辑:我没有注意到你已经建议了这个。老实说,我认为这很好,这是解决问题的唯一方法,而不仅仅是重写 openAL 内部的东西

于 2011-06-06T16:18:50.353 回答