Witam
Mam taki problem że kiedy tworze plik binarny za pomocą klasy fstream i chciałbym zapisać w nim obiekt typu sf::RectangleShape
z sfmla, a następnie odczytać i wyświetlić, visual studio nie sygnalizuję żadnego błędu. Jeśli próbuje wyświetlić w konsoli jakiś parametr obiektu wczytanego za pomocą fstream bez problemowo wszystko działa. Problem się pojawia kiedy próbuje wyświetlić ten obiekt. Próbowałem dynamicznie zaalokować obiekt a później skopiować ten odczytany ale to nie działa.
#include <SFML/Graphics.hpp>
#include <iostream>
#include <fstream>
bool isCollision(sf::Vector2f A_pos, sf::Vector2f A_size, sf::Vector2f B_pos, sf::Vector2f B_size) {
if (A_pos.x + A_size.x >= B_pos.x && A_pos.x <= B_pos.x + B_size.x && A_pos.y + A_size.y >= B_pos.y && A_pos.y <= B_pos.y + B_size.y) {
return true;
}
return false;
}
int main() {
sf::RenderWindow window(sf::VideoMode(300,300), "Snake", sf::Style::Default);
window.setFramerateLimit(100);
sf::RectangleShape rect;
rect.setFillColor(sf::Color::Blue);
rect.setPosition(sf::Vector2f(20,85));
rect.setSize(sf::Vector2f(20,100));
using namespace std;
//Jesli stworze plik to juz tego kodu ponizej nie potrzebuje
/*
fstream saveFile("plik.bin", ios_base::binary | ios_base::out);
saveFile.write((char*)&rect, sizeof(sf::RectangleShape));
saveFile.close();
*/
sf::RectangleShape rec;
fstream plik("plik.bin", ios_base::binary | ios_base::in);
if (plik.good()) {
cout << "Znalazlo plik" << endl;
plik.read((char*)&rec, sizeof(sf::RectangleShape));
plik.close();
}
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
if (isCollision(sf::Vector2f(sf::Mouse::getPosition().x-window.getPosition().x, sf::Mouse::getPosition().y - window.getPosition().y), sf::Vector2f(1, 1), rect.getPosition(), rect.getSize())) {
rect.setFillColor(sf::Color(rand()+ 255, rand() + 255,rand() + 255));
}
using namespace std;
window.clear();
//Ta linijka ponizej generuje blad
window.draw(rec);
window.display();
}
return 0;
}