Я начинающий в изучении sfml, делаю простенькую игру. Возникла проблема: не отрисовывается карта в sfml

С помощью этого sf::String объекта я хотел отрисовать карту:

#pragma once
#include <SFML/Graphics.hpp>

using namespace sf;

const short weight = 1500;
const short height = 1000;
const short W = weight / 50;
const short H = height / 50;


String TileMap[H] = {

"BBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
"B                           B",
"B 0                       0 B",
"BBBBBL                 LBBBBB",
"B    L                 L    B",
"B    L                 L    B",
"B    L                 L    B",
"B    L                 L    B",
"B    L                 L    B",
"B    L                 L    B",
"B    L                 L    B",
"B    L                 L    B",
"B    L                 L    B",
"B    L                 L    B",
"BBBBBL                 LBBBBB",
"B    L                 L    B",
"B    L                 L    B",
"B    L                 L    B",
"BBB  L                 L  BBB",
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBB",

};

Он лежит у меня в отдельном файле "TileSet.h". А в основном "main.cpp" файле я отрисовываю эту карту с помощью RectangleShape объекта, путём раскрашивания прямоугольника 50 на 50 и вывода его в нужную точку. (Создавать карту в TME пока не хочу)

#include <SFML/Graphics.hpp>
#include "Player.h"
#include "TileSet.h"

using namespace sf;

int main() {
    RenderWindow window(VideoMode(weight, height), "Platformer");

    // Создание текстуры для игрока
    Texture img_man;
    img_man.loadFromFile("Изображения/Run1.png"); // Загрузка спрайтлиста из директории

    Player p(img_man, height, weight);

    Clock clock;

    RectangleShape rectangle;

    while (window.isOpen()) {

        // Делаем отсчёт времени,
        // чтобы скорость игрока была одинаковой в любом случае
        float time = clock.getElapsedTime().asMicroseconds();
        clock.restart();
        time /= 800;

        // Обработка событий:
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
        }

        if (Keyboard::isKeyPressed(Keyboard::A)) {
            if (p.onScreen) { // Если игрок не достиг пределов экрана
                p.dx = -0.1;
            }
        }

        if (Keyboard::isKeyPressed(Keyboard::D)) {
            if (p.onScreen) {
                p.dx = 0.1;
            }
        }

        if (Keyboard::isKeyPressed(Keyboard::W)) {
            if (p.onGround) { // Если игрок на земле
                p.dy = -0.35;
                p.onGround = false;
            }
        }


        // Движение и анимация игрока
        p.update(time, height, weight);
        // Очистка экрана (в скобках можно указать цвет фона), отрисовка игрока, вывод на дисплей
        window.clear();
        // Создание карты (тайлсет)
        for (short i = 0; i < H; i++) {
            for (short j = 0; j < W; j++)
            {
                if (TileMap[i][j] == 'B') rectangle.setFillColor(Color::White);

                if (TileMap[i][j] == 'L') rectangle.setFillColor(Color::Yellow);

                if (TileMap[i][j] == '0') rectangle.setFillColor(Color::Green);

                if (TileMap[i][j] == ' ') continue;

                rectangle.setPosition(j * 50, i * 50);
                window.draw(rectangle);
            }
        }
        window.draw(p.sprite);
        window.display();
    }

    return 0;
}

(В "Player.h" находится класс объекта игрока) Но при запуске проги у меня открывается окно с моим персонажем на чёрном фоне. Сработало всё кроме отрисовки карты, и я не имею понятия почему так случилось.


Ответы (0 шт):