Самый лучший способ управлять различными уровнями/сценами в игре с помощью Javascript/HTML5 и EaselJS.

Я думаю, что я мог бы искать то же самое, что и то, что этот человек спрашивал в этой теме, но похоже, что на него не ответили. Я не буду связывать ветку, так как она бесполезна никому, кто читает эту ветку, AFAIK.

Мой вопрос в том, как лучше всего загружать разные уровни/сцены. Я конкретно имею в виду создание всех объектов, характерных для сцены, а затем удаление их из памяти при входе в другую сцену. Я хочу, чтобы некоторые объекты могли оставаться постоянными, как если бы уровень/сцена не изменились, а некоторые должны быть уничтожены, когда уровень больше не используется. Например, вы можете захотеть перейти с экрана меню на первый уровень или на экран параметров. Я не совсем уверен, когда лучше всего загружать текстуры. Я предполагаю, что это зависит от размера текстур.

На самом деле я пишу игровой движок, поэтому я начну с этого. Кстати, мне тоже было бы неплохо узнать, как им пользоваться. Я изучил исходный код этого проекта. И моя проблема в том, что я не совсем понимаю, как это работает. Я особенно смотрю на эту функцию.

  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-файлов?

Спасибо всем


person Oliver Scott-Brown    schedule 08.03.2014    source источник
comment
Что делает этот код, так это принимает URL-адрес типа mypage.com/index.html, а затем загружает последовательные уровни из mypage.com/levels/1.txt, mypage.com/levels/2.txt и т. д. Если какой-либо из них не работает, он сохраняет уровень ошибки в локальном хранилище .   -  person Eli White    schedule 09.03.2014


Ответы (1)


Используйте простое представление уровня (текст, json, ...). Загрузите его, прочитав файл, проще всего иметь относительный файл (тот же корневой URL-адрес, что и у вашей игры) и убедиться, что вы изолируете все данные «уничтожаемого» уровня в одном объекте. Если данные повторно используются на уровнях (например, звуковые эффекты), вы можете оставить их вне данных уровня, чтобы избежать их очистки. Вот так модель выглядит в масштабе:

browser [
  gameengine [
    yourgame [
      player data (total score ...)
      common resources (sound effects, player graphics, ...)
      level1 specific data (will be unloaded when done)
    ]
  ]
]

Для загрузки данных вы можете использовать PreloadJS.

Относительно выгрузки прочитайте это: Выгрузка ресурсов в HTML с помощью JavaScript

person Christophe Roussy    schedule 22.03.2014