Не загружается карта в проекте

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics Не загружается карта в проекте

В этой теме 11 ответов, 2 участника, последнее обновление Павел Букреев Павел Букреев 8 года/лет, 4 мес. назад.

Просмотр 12 сообщений - с 1 по 12 (из 12 всего)
  • Автор
    Сообщения
  • #2402

    tequilarusa
    Участник
    Сообщений:6

    Зарегистрирован:
    05.12.2015

    Репутация:2

    Моя карта не загружается. Я скачала проект из урока 22, та карта загружается, все в порядке. Моя же не хочет. Все файлы находятся в нужном месте. Размер карты 200 на 200 тайлов. Используется 10 наборов тайлов, 4 слоя тайлов и 2 слоя объектов (это еще не все, хочу обойтись для своей игры одной картой, без перехода по уровням).

    Используя точки останова, я выяснила, что у меня ошибка в векторе, а именно в файле Level.cpp  вот в этом месте (выделено жирным) возникает ошибка

    if (subRectToUse >= 0)
    {
    sf::Sprite sprite;
    sprite.setTexture(tilesetImage);
    sprite.setTextureRect(subRects[subRectToUse]);
    sprite.setPosition(x * tileWidth, y * tileHeight);
    sprite.setColor(sf::Color(255, 255, 255, layer.opacity));

    layer.tiles.push_back(sprite);
    }

    Я выяснила, что subRectToUse = 7585, а subRects = 961.

    Если открыть карту в блокноте, то видно, что значение для subRects берется из tilecount, a значение subRectToUse = tileGID – firstTileID. В моей карте tileGID = 7586.

    Получается, моя карта не загружается, потому что она слишком большая?

    #2403
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:582

    Зарегистрирован:
    04.01.2015

    Репутация:106

    Попробуй создай тестовую карту небольшую и не сильно нагруженную и загрузи её сначала.

    #2432

    tequilarusa
    Участник
    Сообщений:6

    Зарегистрирован:
    05.12.2015

    Репутация:2

    Ваша карта как раз-таки загружается. А вот моя не хочет(( Я посмотрела, у меня был один набор тайлсетов, который я не использовала. Я его удалила, но опять та же проблема: Vector subscript out of range.

    Теперь у меня subRectToUse = 6624, а subRects = 7392.

    В вашей карте тоже subRectToUse меньше, чем subRects.  Я думала, что если у меня также будет, то ошибка уйдет, но нет((

    #2433

    tequilarusa
    Участник
    Сообщений:6

    Зарегистрирован:
    05.12.2015

    Репутация:2

    У меня еще во втором окне, где просто черный фон должен быть, куча цифр пишется каких-то

    #2439
    +1

    tequilarusa
    Участник
    Сообщений:6

    Зарегистрирован:
    05.12.2015

    Репутация:2

    Я обнаружила, где у меня происходит ошибка. Ошибка происходит, когда рисуется слой Background. Дело в том, что в этом слое используются разные наборы тайлов. И ошибка Vector subscript out of range происходит тогда, когда должны использоваться для рисования заднего фона тайлы из другого набора тайлов. Я попробую сделать так, чтобы в каждом слое использовался только один набор тайлов и посмотрю, что получится

    #2440
    +1

    tequilarusa
    Участник
    Сообщений:6

    Зарегистрирован:
    05.12.2015

    Репутация:2

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

    #2448
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:582

    Зарегистрирован:
    04.01.2015

    Репутация:106

    “а затем при прорисовке следующего уровня используется этот же набор тайлов” . уровень игровой или уровень=слой тайлов?

    #2449

    tequilarusa
    Участник
    Сообщений:6

    Зарегистрирован:
    05.12.2015

    Репутация:2

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

    #2450
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:582

    Зарегистрирован:
    04.01.2015

    Репутация:106

    Увы код такой и автор level.h кода не я:) там ещё треугольные объекты, например, не поддерживаются. Автор иностранец на форуме каком то говорил допилит, но так и забил видимо:)

    #2462

    tequilarusa
    Участник
    Сообщений:6

    Зарегистрирован:
    05.12.2015

    Репутация:2

    Да, про треугольные объекты это я тоже выяснила. Можете мне помочь с ответом на один вопрос. Моя карта очень большая, и я думала разделить ее на несколько карт (на 8). Моя одногруппница тоже делала игру, и она делала несколько карт в Tiled Map Editor, для разных уровней, но не смогла найти пример кода, как загружать новую карту при переходе на другой уровень. И тогда она сделала карты с помощью двумерных массивов и, соответственно, реализовала загрузку новой карты при переходе на следующий уровень. Она подходила к нашему куратору по курсовому проекту, он ее, скажем так, послал.

    Я искала тоже пример кода, нашла готовый проект на github. Там тоже самое, карты в виде двумерного массива запихнуты в текстовые файлы.  А вот как сделать загрузку новой карты, сделанной в Tiled Map Editor, при переходе на следующий уровень?

    #2468
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:582

    Зарегистрирован:
    04.01.2015

    Репутация:106

    не делал, но подозреваю как можно попробовать:

    вышел урок про рестарт игры. когда мы выходим из функции – удаляются все объекты в ней.

    при переходе на другой уровень можно удалить все объекты выходом из функции, оставив только окно сфмл и возможно каким то параметром передавать номер уровня в игровую функцию startgame (как в уроке №32) и в зависимости от параметра грузить уже другую карту.

    #2469
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:582

    Зарегистрирован:
    04.01.2015

    Репутация:106
Просмотр 12 сообщений - с 1 по 12 (из 12 всего)

Для ответа в этой теме необходимо авторизоваться.