Witam, tak jak w temacie, mam straszne problemy z połączeniem OOPu i SFML'a.
Dopiero zaczynam przygodę z OOPem, rozumiem mniej więcej co, po co i jak i w konsoli sobie jakoś radzę z poukładaniem wszystkiego (oczywiście podstawy OOPu, na razie nie grzebię w polimorfizmie i funkcjach wirtualnych), ale takie podstawy jak np. dziedziczenie stosuję.
Chciałem spróbować stworzyć prostą grę - pokrótce: Bohater będący sprajtem porusza się po ekranie i zbiera punkty. Głębiej nie ma sensu opisywać, bo to nieistotne, ale oczywiście gra będzie dalej rozbudowywana.
No ale pojawia się tytułowy problem. Może najpierw kod:
#include <iostream>
#include <SFML/Graphics.hpp>
class Hero
{
private:
sf::Texture THero;
sf::Sprite SHero;
public:
void loadMedia()
{
THero.loadFromFile("hero.jpg");
SHero.setTexture(THero);
}
void draw(sf::RenderWindow window)
{
window.draw(THero);
}
};
class Point
{
private:
sf::Texture TPoint;
sf::Sprite SPoint;
public:
void loadMedia()
{
TPoint.loadFromFile("dot.jpg");
SPoint.setTexture(TPoint);
}
};
int main()
{
sf::RenderWindow window;
window.create(sf::VideoMode(800, 600), "The Game v1.0");
Hero hero;
hero.loadMedia();
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
hero.draw(window);
window.display();
}
return 0;
}
Wcześniej próbowałem stworzyć klasę Window, tam zadeklarować okno i klasy Hero oraz Point dziedziczyć z Window żeby mieć dostęp do zmiennej okna, no ale to jest bez sensu bo wszystkie funkcje dostarczone przez SFML musiałbym "wsadzać" do funkcji w klasie, co jest dla mnie głupotą (np. window.display(), window.clear(), window.isOpen() ).
Z drugiej strony, deklaracja okna w mainie jest dla mnie bardzo nieelegancka i chyba samego okna nie da się przesyłać do funkcji w klasie (u mnie wyskakują błędy kompilacji).
Tak więc zwracam się do Was z prośbą o uratowanie mnie z opresji :D Proszę o ogólne przedstawienie jak to ma wyglądać, bo ja dostaję przy tym gorączki.
Ten kod jest "po przejściach", przerabiałem go 100 razy żeby wypróbować różne opcje więc wygląda jak wygląda, szczyt moich możliwości to nie jest, ale jak macie jakieś rady dla nowego to chętnie wysłucham :)