对于正在酝酿中的游戏工作:使用一个HTML5 <audio>
元素和一些JavaScript,我试图创建一个选择来自物体的随机键(这将是一个数组)的播放列表。所选对象基于玩家状态的“心情”。然后我从数组中提取歌曲的源URL,如果所选歌曲尚未播放,请加载它,然后播放它。该play
功能如下(这是一个对象字面的一部分):与“随机”阵列
play: function(option) {
if (G.audio.enabled) {
var player = G.audio.player,
playlist = G.audio.playlist;
if (option && G.audio.playlist[option]) {
G.audio.mood = option;
var song = playlist[option][Math.floor(Math.random() * (playlist[option].length))][2];
if (G.audio.current != song) {
G.audio.current = song;
player.attr("src", song);
player[0].load();
player[0].play();
} else {
G.audio.play(G.audio.mood);
}
} else {
G.audio.play(G.audio.mood);
}
try {
player[0].removeEventListener("ended", G.audio.play);
} catch (e) {}
player[0].addEventListener("ended", G.audio.play);
}
}
因此,举例来说,如果我们用处理(且只有)“英雄”类(这是情绪),G.audio.playlist
应该是这样的:
heroic: [
[
"Song Title",
"Artist",
"Source url",
"other info"
],
[
"Song Title",
"Artist",
"Source url",
"other info"
],
[
"Song Title",
"Artist",
"Source url",
"other info"
]
];
一切工作正常,除了一两件事:第二首很少玩,而第一和第三通常是在负载玩的人。
所以,我的问题是,是否有关于为什么任何逻辑推理:
playlist[option][Math.floor(Math.random() * (playlist[option].length))][2];
会给予优先于数组的第一个([0]
)和第三个键([2]
)?
您确定存在偏见吗?你的随机数生成代码看起来很好...... – emboss