Tak jak w pytaniu , chcę , aby piłka zmieniła swój kolor na taki jaki ustawię w ustawieniach gry . Jestem już bez rady i proszę o jakieś wskazówki .
game.h
#ifndef game_h
#define game_h
#include <SFML/Graphics.hpp>
class Game
{
public:
Game();
~Game();
void uruchomGre();
private:
sf::Texture tekstura;
sf::Sprite tlo;
enum stany_gry{Menu, Gra , Ustawienia , Koniec};
stany_gry stan;
void menu();
sf::Font czcionka;
};
game.cpp
#include <SFML/Graphics.hpp>
#include "game.h"
#include "silnik.h"
#include "settings.h"
#include <iostream>
using namespace std;
sf::RenderWindow okno(sf::VideoMode(1920 , 1080 , 32) , "PONG SFML" , sf::Style::Default);
Game::Game()
{
if(czcionka.loadFromFile("atari.TTF")== false)
{
cout << "Error";
exit(0);
}
stan = Menu;
}
void Game::uruchomGre()
{
while(stan != Koniec)
{
switch(stan)
{
case Menu:
{
menu();
}break;
case Gra:
{
Silnik silnik(okno);
silnik.uruchomSilnik();
stan = Menu;
}break;
case Ustawienia:
{
Settings settings(okno);
//cout << a[0] << "Ustawienia 1" << endl;
settings.uruchomUstawienia();
//a[0] = b[0];
//cout << b[0] << "Test" << endl;
stan = Menu;
}break;
}
}
}
void Game::menu()
{
tekstura.loadFromFile("atari.png");
tlo.setTexture(tekstura);
sf::Text tekst[3];
string opcje[3] = {"Play" , "Settings" , "Quit"};
for(int i = 0 ; i < 3 ; i++)
{
tekst[i].setFont(czcionka);
tekst[i].setCharacterSize(60);
tekst[i].setString(opcje[i]);
tekst[i].setPosition(1920 / 2 - tekst[i].getGlobalBounds().width / 2 , 100 * i + 400);
}
while(stan == Menu)
{
sf::Vector2f mysz(sf::Mouse::getPosition());
sf::Event wydarzenie;
while(okno.pollEvent(wydarzenie))
{
if(wydarzenie.type == sf::Event::Closed || tekst[2].getGlobalBounds().contains(mysz) && wydarzenie.type == sf::Event::MouseButtonPressed && wydarzenie.key.code == sf::Mouse::Left)
stan = Koniec;
else if(tekst[0].getGlobalBounds().contains(mysz) && wydarzenie.type == sf::Event::MouseButtonPressed && wydarzenie.key.code == sf::Mouse::Left)
stan = Gra;
else if(tekst[1].getGlobalBounds().contains(mysz) && wydarzenie.type == sf::Event::MouseButtonPressed && wydarzenie.key.code == sf::Mouse::Left)
stan = Ustawienia;
}
for(int i = 0 ; i < 3 ; i++)
{
if(tekst[i].getGlobalBounds().contains(mysz))
tekst[i].setColor(sf::Color::Red);
else
tekst[i].setColor(sf::Color::White);
}
okno.clear(sf::Color::Black);
okno.draw(tlo);
for(int i = 0 ; i < 3 ; i++)
{
okno.draw(tekst[i]);
}
okno.display();
}
}
silnik.h
#ifndef silnik_h
#define silnik_h
#include <SFML/Graphics.hpp>
#include "settings.h"
class Silnik:public Settings
{
public:
Silnik();
Silnik(sf::RenderWindow &win);
~Silnik();
void uruchomSilnik();
void zmiana_koloru();
private:
sf::RenderWindow *window;
sf::CircleShape pilka;
sf::Color kolor; // zmienna przechowująca kolor piłki
};
#endif // silnik_h
silnik.cpp
#include "silnik.h"
#include <cmath>
#include <iostream>
using namespace std;
Silnik::Silnik(sf::RenderWindow &win)
{
if(czcionka.loadFromFile("atari.TTF")== false)
{
cout << "Error";
exit(0);
}
window = &win;
k = 0;
z = 0;
}
void Silnik::uruchomSilnik()
{
bool menu = false;
float szybkosc = 1.5;
float x = -1;
float y = 0;
zmiana_koloru();
pilka.setRadius(5);
pilka.setFillColor(kolor);
pilka.setPosition(1920 / 2 - pilka.getGlobalBounds().width / 2 , 1080 / 2 - pilka.getGlobalBounds().height / 2);
while(menu != 1)
{
sf::Event wydarzenie;
while(window->pollEvent(wydarzenie))
{
if(wydarzenie.type == sf::Event::KeyReleased && wydarzenie.key.code == sf::Keyboard::Escape)
menu = true;
}
window->clear();
window->draw(pilka);
window->display();
}
}
void Silnik::zmiana_koloru()
{
kolor = kolor1; // przypisuje zmiennej kolor , "kolor1" z klasy Settings
}
settings.h
#ifndef settings_h
#define settings_h
#include <SFML/Graphics.hpp>
class Settings
{
public:
Settings(sf::RenderWindow &win);
void uruchomUstawienia();
sf::Color kolor1 = sf::Color::Blue;
private:
sf::RenderWindow *window;
sf::Font czcionka;
sf::RectangleShape prostokat[3];
};
#endif // settings_h
settings.cpp
#include "settings.h"
#include <iostream>
using namespace std;
Settings::Settings(sf::RenderWindow &win)
{
window = &win;
if(czcionka.loadFromFile("atari.TTF")== false)
{
cout << "Error";
exit(0);
}
}
void Settings::uruchomUstawienia()
{
bool ustawienia = false;
string opcje[3] = {"Kolor" , "Dzwiek" , "Tlo"};
sf::Text tekst[3];
for(int i = 0 ; i < 3 ; i++)
{
tekst[i].setFont(czcionka);
tekst[i].setCharacterSize(60);
tekst[i].setString(opcje[i]);
tekst[i].setPosition(1920 / 2 - tekst[i].getGlobalBounds().width / 2 , 150 * i + 400);
}
for(int i = 0 ; i < 3 ; i++)
{
prostokat[i].setSize(sf::Vector2f(60 , 20));
prostokat[i].setPosition(840 + 100 * i , 510);
}
prostokat[0].setFillColor(sf::Color::Red);
prostokat[1].setFillColor(sf::Color::Green);
prostokat[2].setFillColor(sf::Color::Blue);
while(ustawienia != 1)
{
sf::Vector2f mysz(sf::Mouse::getPosition());
sf::Event wydarzenie;
while(window->pollEvent(wydarzenie))
{
if(wydarzenie.type == sf::Event::KeyReleased && wydarzenie.key.code == sf::Keyboard::Escape)
ustawienia = true;
}
if(prostokat[0].getGlobalBounds().contains(mysz) && wydarzenie.type == sf::Event::MouseButtonPressed)
{
kolor1 = sf::Color::Red; // tutaj zmieniam kolor piłki na czerwony
prostokat[0].setOutlineThickness(5);
prostokat[0].setOutlineColor(sf::Color::White);
}
else if (prostokat[0].getGlobalBounds().contains(mysz) == false && wydarzenie.type == sf::Event::MouseButtonPressed)
{
prostokat[0].setOutlineThickness(0);
prostokat[0].setFillColor(sf::Color::Red);
}
window->clear(sf::Color::Black);
for(int i = 0 ; i < 3 ; i++)
window->draw(tekst[i]);
for(int i = 0 ; i < 3 ; i++)
window->draw(prostokat[i]);
window->display();
}
}