我想我可能正在寻找与此人在这个帖子中提出的问题相同的事情,但看起来它还没有被回答。我不会链接该主题,因为它对任何阅读此主题AFAIK的人都没用。
我的问题是,加载不同关卡/场景的最佳方法是什么。我特别指的是建立所有特定于场景的对象,然后在进入不同场景时从内存中清除它们。我希望一些对象能够保持持久性,好像关卡/场景没有改变,有些对象在不再使用关卡时被销毁。例如,您可能希望从菜单屏幕移动到第一级或选项屏幕。我不确定什么时候最好加载纹理。我猜这取决于纹理有多大。
我实际上是在编写一个游戏引擎,所以这就是我要开始的地方。顺便说一句,我也很高兴知道如何使用它。我研究了this project的源代码。我的问题是我不太明白它是如何工作的。我特别关注这个功能。
PlatformerGame.prototype.DownloadAllLevels = function () {
// Searching where we are currently hosted
var levelsUrl = window.location.href.replace('index.html', '') + "levels/";
var that = this;
for (var i = 0; i < numberOfLevels; i++) {
try {
var request = new XMLHttpRequest();
request.open('GET', levelsUrl + i + ".txt", true);
request.onreadystatechange = makeStoreCallback(i, request, that);
request.send(null);
}
catch (e) {
// Probably an access denied if you try to run from the file:// context
// Loading the hard coded error level to have at least something to play with
//console.log("Error in XHR. Are you offline?");
if (!window.localStorage["platformer_level_0"]) {
window.localStorage["platformer_level_0"] = hardcodedErrorTextLevel;
}
}
}
这是从外部加载的URL还是什么?是否使用XML文件定义了级别?
全部谢谢
答案 0 :(得分:2)
使用级别的简单表示(text,json,...)。 通过阅读文件加载它,最简单的方法是拥有一个相对文件(与游戏相同的根网址),并确保将所有可销毁的文件隔离开来。同一对象中的级别数据。 如果数据在各个级别上重复使用(如声音效果),您可以将其保留在特定级别数据之外,以避免清除它。 这就是模型在范围方面的表现:
browser [
gameengine [
yourgame [
player data (total score ...)
common resources (sound effects, player graphics, ...)
level1 specific data (will be unloaded when done)
]
]
]
要加载数据,您可以使用PreloadJS。