SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Не рисуется карта › Ответ в теме: Не рисуется карта
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
sf::String TileMap[HEIGHT_MAP] = { “0000000000000000000000000000000000000000” “0 0″ “0 s 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0 0″ “0000000000000000000000000000000000000000” }; |
Пробелы тоже символы, и учитываются при подсчёте длинны строки. Поскольку ты используешь константы для итерации по карте то будь добр проверять что длинна строки = этой константе:
1 2 3 4 5 6 7 8 9 10 11 12 |
const int HEIGHT_MAP = 25; const int WIDTH_MAP = 40; for(int i = 0; i < HEIGHT_MAP; i++) for (int j = 0; j < WIDTH_MAP; j++) { if (TileMap[i][j] == ‘ ‘) s_map.setTextureRect(IntRect(0, 0, 32, 32)); if (TileMap[i][j] == ‘s’) s_map.setTextureRect(IntRect(32, 0, 32, 32)); if ((TileMap[i][j] == ‘0’)) s_map.setTextureRect(IntRect(64, 0, 32, 32)); s_map.setPosition(j * 32, i * 32); window.draw(s_map); } |
Поскольку c++ не поддерживает string по умолчанию сам он реализован в виде вектора char, и когда ты пытаешься сослатся на элемент которого нет в векторе – хватаешь экзепшен что ищеш обьект вне поля видимости. Выхода 2 – либо иметь строку длинной равной константе, что в данном случае самое уместное, либо считать длинну строки и использовать каждый раз её для итерации по масиву, что повлечёт свои проблемы так как это тайлсет а не строка содержащая в себе локализацию к примеру.