Я начинающий в изучении 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" находится класс объекта игрока) Но при запуске проги у меня открывается окно с моим персонажем на чёрном фоне. Сработало всё кроме отрисовки карты, и я не имею понятия почему так случилось.