我在clear js做一个简单的游戏,我有一个关于优化的问题。
我需要的是将音乐和声音分开我有两个变体:
- Music是一个音频对象,而Sounds是每个声音的音频对象列表。这样,我必须改变(例如)每个声音的音量,如果它需要:
let music_player = new Audio('some src');
let sounds = {
kick: new Audio('some src'),
jump: new Audio('some src'),
run: new Audio('some src')
//there can be more sounds
};
window.addEventListener('click', function(){
music_player.play();
sounds.jump.play();
sounds.kick.play();
});
- 音乐没有改变,但声音现在是一个音频对象,如果我想播放不同的声音,我必须改变它的来源。它也可以是SoundPlayer的类:
let music_player = new Audio('some src');
let sound_player = new Audio('some src');
//list of sounds with their sources
let sounds = {
kick:'some src',
jump:'some src',
run:'some src'
};
function sound_play(sound){
sound_player.src = sound;
sound_player.play();
}
window.addEventListener('click', function(){
music_player.play();
sound_play(sounds.jump);
sound_play(sounds.kick);
});
你认为最好的方法是什么?你的问题不清楚。
但让我们试着帮助……
如果你使用new Audio("src")
,那么你现在有一个音频在你的javascript ..
但是你必须知道,在用户与你的dom交互之前,你不能play()
它。
所以我假设用户现在与dom交互来解释下一个:
- 使用
anyAudio.play()
播放音频 - 使用
anyAudio.pause()
暂停音频 - 使用
anyAudio.paused
检查音频是否暂停 - 使用
anyAudio.currentTime
获取或设置 音频的当前时间 - 使用
anyAudio.playbackRate
获取和设置音频的速度default: 1
- 使用
anyAudio.volume
获取和设置音频的音量default: 1
假设您想创建一个函数,从声音列表中获取音频并以特定音量播放:
let sound_player = new Audio("")
let sounds = {
kick:'some src',
jump:'some src',
run:'some src'
}
function sound_play(sound, volume){
sound_player.src = sound
sound_player.volume = volume || 1
sound_player.play()
}
现在你的函数已经准备好了,但是,要确保在用户与dom交互之后运行它,因为如果用户不与dom交互,它将无法工作。