好的,我的新网站刚刚上线,通过 Google Apps 交付。在百灵鸟中,我决定包含一个 javascript / HTML5 Lunar Lander 克隆(Martian Lander),这是我不久前写的一个练习。当我在本地打开游戏时,游戏运行良好,但是当它通过 GAE 交付时,声音似乎并没有在每个系统上加载。在移动 Safari 中,它们都没有加载。在桌面上的 safari 中,它们都可以可靠地加载到我的计算机上,但不能在其他一些计算机上加载。在 Chrome(在桌面上)它似乎可以工作,但在 iOS 的 Chrome 中,只加载一个声音。在桌面上,似乎总是相同的声音无法加载(explode1.mp3),这是我正在加载的最小声音。如您所见,如果您单击该链接,声音可以从服务器下载...
起初问题似乎与区分大小写有关,所以我在文件名中切换了大小写,但该修复并没有继续工作。这是一个问题,因为我的加载栏与加载了多少资源直接相关,所以它只是坐在那里等待没有回复的 GET 请求......有没有人经历过这样的事情,GET 没有收到回复特定资源,但直接加载资源可以正常工作吗?
我应该说我对大多数这些技术都很陌生,所以在我看来我很可能只是犯了一些新手错误。不幸的是,我不确定那些新手错误会是什么,因为我是新手!
这是我用来加载声音的代码:
function loadSound(soundName) {
var newElement = document.createElement("audio");
newElement.addEventListener("canplaythrough", assetLoaded, false);
document.body.appendChild(newElement);
var audioType = supportedAudioFormat(newElement);
if (audioType == "") {
alert("no audio support");
return;
}
newElement.setAttribute("src", "lander/sounds/" + soundName + "." + audioType);
console.log("loading sound " + newElement.src + "...");
return newElement;
}
和...
function assetLoaded() {
var assetName = this.src;
numAssetsLoaded++;
console.log("loaded asset " + numAssetsLoaded + " (" + assetName + ")");
if (numAssetsLoaded >= numAssetsToLoad) {
shipSpriteSheet.removeEventListener("load", assetLoaded, false);
pointImage.removeEventListener("load", assetLoaded, false);
thrustAudioElement.removeEventListener("canplaythrough", assetLoaded, false);
explosionAudioElement.removeEventListener("canplaythrough", assetLoaded, false);
victoryAudioElement.removeEventListener("canplaythrough", assetLoaded, false);
musicTrackElement.removeEventListener("canplaythrough", assetLoaded, false);
gameState = GAME_STATE_INIT;
}
}
如果您查看控制台输出,您会看到所有声音都开始加载(尤其是explode1.mp3),但不一定完成并调用assetLoaded
...
更新:
似乎共识是我不应该使用 mp3(顺便说一句,我已经在使用 mp3、AAC 和 ogg,但默认使用 mp3),而且我应该使用 Web Audio API。这些都是受欢迎的输入,我将进行必要的更改。但是,对于最初的问题,我仍然没有答案,即“为什么一个特定的声音不能在桌面上可靠地加载而其他声音加载没有问题?” 有没有人想试一试?或者答案会是“这些事情是高度不可预测的,除了切换到更可靠的方法,比如 Web Audio API 之外,没有办法解决它”?
UDATE:
这是我文件的摘录app.yaml
,据我所知,它有助于 GAE 设置服务器。
- url: /(.*\.(mp3|ogg|wav))
static_files: \1
upload: (.*\.(mp3|ogg|wav))