使用Javascript / HTML5和EaselJS管理游戏中不同关卡/场景的最佳方式

时间:2014-03-08 23:57:49

标签: javascript html5 easeljs createjs

我想我可能正在寻找与此人在这个帖子中提出的问题相同的事情,但看起来它还没有被回答。我不会链接该主题,因为它对任何阅读此主题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文件定义了级别?

全部谢谢

1 个答案:

答案 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。

关于卸载请阅读:Unloading Resources on HTML with JavaScript