Как исправить SFML Показать белый квадрат вместо спрайтов? (Решен)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как исправить SFML Показать белый квадрат вместо спрайтов? (Решен)

Сообщение Anonymous »

Я строю игру с нуля, используя библиотеку SFML для C ++, и сейчас я работаю над пользовательской системой TileMap. Сама система довольно проста: она читает файл JSON, структурированный определенным образом, извлекает координаты и путь текстуры (поэтому, плитка), создает спрайт с этой текстурой и помещает его в данную позицию, используя координаты. Я также планирую сделать инструмент GUI в будущем, чтобы легко создать эти файлы JSON, но сейчас это не важно. Система, которую я собрал в основном, работает ... или, по крайней мере, она должна. Но вместо того, чтобы показывать спрайт, он просто отображает белый квадрат. В любом случае, вот код: < /p>
tilemap.cpp:

Код: Выделить всё

#include "header/tilemap.hpp"
#include 

void splitCoord(const std::string& coord, float& posX, float& posY) {
size_t virgola = coord.find(',');
assert(virgola != std::string::npos && "Coordinata non valida, manca la virgola");

posX = std::stof(coord.substr(0, virgola));
posY = std::stof(coord.substr(virgola + 1));
}

TileMap::TileMap() : fileStream("assets/tilemap/tiles.json") {
assert(fileStream.is_open() && "Impossibile caricare i dati della tilemap");
datiJson = nlohmann::json::parse(fileStream);
tiles.clear();

for (const auto& tileJson : datiJson) {
assert(tileJson.contains("file") && "Impossibile trovare il campo 'file' nel json");
assert(tileJson.contains("coord") && "Impossibile trovare il campo 'coord' nel file json");

Tile tile;
tile.file = tileJson["file"].get();
tile.coord = tileJson["coord"].get();

splitCoord(tile.coord, tile.posX, tile.posY);
if (!tile.texture.loadFromFile(tile.file)) {
assert(false && "Impossibile caricare la texture del tile");
}

tile.sprite = std::make_unique();
tile.sprite->setTexture(tile.texture);
tile.sprite->setPosition({tile.posX, tile.posY });
tiles.push_back(std::move(tile));
}
}
< /code>
tilemap.hpp:
#pragma once
#include 
#include 
#include 
#include 
#include 
#include 
#include 

struct Tile {
std::string file;
std::string coord;
sf::Texture texture;
std::unique_ptr sprite;
float posX = 0;
float posY = 0;
};

class TileMap {
private:
std::ifstream fileStream;
nlohmann::json datiJson;
public:
std::vector tiles;
TileMap();
};
< /code>
game.cpp (где я называю Tilemap): < /p>
#include 
#include "header/assets.hpp"
#include "header/utils.hpp"
#include "header/tilemap.hpp"

void avviaGioco(sf::RenderWindow& finestra) {
finestra.setSize(sf::Vector2u(1280, 720));
Utils::centraFinestra(finestra, sf::VideoMode({1280, 720}));

TileMap tilemap;

while (finestra.isOpen()) {
while (const std::optional event = finestra.pollEvent()) {
if (event->is()) {
finestra.close();
}
}
finestra.clear();
for (const auto& tile : tilemap.tiles) {
if (tile.sprite)
finestra.draw(*tile.sprite);
}
finestra.display();
}
}
< /code>
tiles.json (пример): < /p>
[
{
"file": "assets/tilemap/tile_00.png",
"coord": "100,100"
}
]
Я проверил путь и провел некоторую отладку, но я не могу выяснить, что вызывает проблему, по крайней мере, с координат обработкой работает и ставит спрайты в нужно>

Подробнее здесь: https://stackoverflow.com/questions/796 ... tes-solved
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»