sprawdzanie stanu gry nie działa

0

siema, mam pewien problem ze sprawdzaniem stanu gry.

Otóż mam konstruktor:

Menu::Menu(sf::Texture t, sf::Texture tP, sf::Texture tAut, sf::Texture tQ, sf::Sprite m, sf::Sprite p, sf::Sprite aut, 
	sf::Sprite qu,int &game)
{
	if(!t.loadFromFile("menu.png"))
		std::cout << "nie udalo sie zaladowac tla menu" << std::endl;
	if(!tP.loadFromFile("Play.png"))
		std::cout << "nie udalo sie zaladowac Play" << std::endl;
	if(!tAut.loadFromFile("options.png"))
		std::cout << "nie udalo sie zaladowac Options" << std::endl;
	if(!tQ.loadFromFile("Quit.png"))
		std::cout << "nie udalo sie zaladowac quit" << std::endl;

	game = Glowne;
	game_st = game;

	tMenu = t;
	tPlay = tP; 
	tOptions = tAut;
	tQuit = tQ;

	menu.setTexture(tMenu);
	play.setTexture(tPlay);
	play.setPosition(300, 200);

	options.setTexture(tOptions);
	options.setPosition(30, 440);

	quit.setTexture(tQuit);
	quit.setPosition(600, 440);
}

i mam problem ze sprawdzaniem stanu gry, w .h mam zadeklarowane game_st a tutaj przypisuje mu stan gry Glowne.

i w innej funkcji

void Menu::check(sf::RenderWindow &okno)
{

	sf::Vector2i ms(sf::Mouse::getPosition(okno).x, sf::Mouse::getPosition(okno).y);

	if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
	{
		if((ms.x > play.getPosition().x && ms.x < play.getPosition().x + play.getTexture()->getSize().x)&&
			(ms.y > play.getPosition().y && ms.y < play.getPosition().y + play.getTexture()->getSize().y)){
				 game_st = Graj;
		}

		//opcje:
		else if((ms.x > options.getPosition().x  && ms.x < options.getPosition().x + options.getTexture()->getSize().x)&&
			(ms.y > options.getPosition().y && ms.y < options.getPosition().y + options.getTexture()->getSize().y))
					game_st = Opcje;
		//WYJSCIE
		else  if((ms.x > quit.getPosition().x && ms.x < quit.getPosition().x + quit.getTexture()->getSize().x)&&
			(ms.y > quit.getPosition().y && ms.y < quit.getPosition().y + quit.getTexture()->getSize().y))
					game_st = Wyjscie;

	}
}

ustawiam stan gry na graj jeżeli został "wciśnięty" sprite.

w funkcji głównej (main) mam taki kawałek kodu:

int game_st;

Menu m(tMenu, tPlay, tOption, tQuit, menu, play, option, quit, game_st); //konstruktor

i w pętli sprawdzam stan gry

if(game_st == Glowne){
			m.check(window); 
			m.showMenu(&window); //window to jest okno aplikacji
		}
		else if(game_st == Graj){
			std::cout << "dziala graj " << std::endl;
		}

i właśnie jakby te sprawdzanie nie działa, bo po naciśnięciu odpowiedniego przycisku powinno w konsoli spamowac napisem "dziala graj", ale tak nie jest, podejrzewam że zrobiłem coś źle w konstruktorze, ale nie jestem pewny co.

(Tak, wiem że trochę do d**y problem opisałem)
po prostu nie zmienia mi stanu gry, szukam tu pomocy ;)

@Edit
ok, poradziłem sobię :)

0

Ty nie masz problemu ze sprawdzaniem stanu gry. Masz jedynie problem z nazywaniem zmiennych i tworzeniem funkcji.

        if((ms.x > play.getPosition().x && ms.x < play.getPosition().x + play.getTexture()->getSize().x)&&
            (ms.y > play.getPosition().y && ms.y < play.getPosition().y + play.getTexture()->getSize().y)){
                 game_st = Graj;
        }
 
        //opcje:
        else if((ms.x > options.getPosition().x  && ms.x < options.getPosition().x + options.getTexture()->getSize().x)&&
            (ms.y > options.getPosition().y && ms.y < options.getPosition().y + options.getTexture()->getSize().y))
                    game_st = Opcje;
        //WYJSCIE
        else  if((ms.x > quit.getPosition().x && ms.x < quit.getPosition().x + quit.getTexture()->getSize().x)&&
            (ms.y > quit.getPosition().y && ms.y < quit.getPosition().y + quit.getTexture()->getSize().y))
                    game_st = Wyjscie;
 

Takiego czegos ludzie nie parsuja wzrokiem od razu. Dodatkowo wystepuja tu powtorzenia. Albo powydzielaj te warunki do funkcji, ktore beda sensownie nazwane, albo potworz zmienne wewnatrz tej funkcji.

Jak przepiszesz to na normalny angielski, to masz 99% szansy na rozwiazanie swojego problemu...

0

Oczywiście o debugerze nie słyszałeś?

1
  1. Dlaczego w konstruktorze używasz kopii argumentów?
  2. Dlaczego opierasz GUI na drzewku warunków?
  3. Dlaczego niepoprawne wczytanie obrazka spowoduje jedynie komunikat?
  4. Dlaczego używasz obiektu cout zamiast clog i/lub cerr?
  5. Co to za krzaczek?
sf::Vector2i ms(sf::Mouse::getPosition(okno).x, sf::Mouse::getPosition(okno).y)
auto ms = sf::Mouse::getPosition(okno)
  1. Dlaczego mieszasz polski i angielski we własnym kodzie (nazewnictwo)?
0

@spartanPAGE
6. jako nazwę biorę najczęściej pierwszą myśl do głowy
5. nie znałem tego
4. a co to za różnica, sprawdzam regularnie jak działa program, błędy wypisywane są jedynie dla mnie
3. bo sam wtedy wyłączam program
2. nie znam lepszego sposobu

  1. gdzie

1 użytkowników online, w tym zalogowanych: 0, gości: 1