Dlaczego w grze nie zmieniają mi się wartości zmiennych

0

Witam, nie odświeżają mi się zmienione parametry w grze z użyciem SFML. Ustawiam np prędkość gracza na 5 i gdy zmienię potem na np 1 to prędkość się w rzeczywistości nie zmienia. Aby wprowadzić zmianę muszę zmienić typ zmiennej np float na int czy odwrotnie. Dlaczego tak się dzieje? W kodzie nie mam żadnej filozofii, która mogłaby w jakiś sposób na to wpływać. Piszę w Visual Studio 2015.

player.h

class player : public entity
{
public:
	float movementSpeed = 1;	
};

player.cpp

void player::update()
{
	sprite.setPosition(rect.getPosition());
}

void player::updateMovement()
{
	if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
	{
		rect.move(0, -movementSpeed);
		sprite.setTextureRect(sf::IntRect(counterWalking * 32, 3 * 49, 32, 49));
		direction = 1;
	}
}

w pętli głównej gry:

		Player1.update();
		Player1.updateMovement();
		window.draw(Player1.sprite);
		window.display();

Powyżej wrzuciłem fragmenty kodu, które się nie odświeżają po zmianie parametrów, tak samo dzieje się z innymi zmiennymi: prędkość pocisku, obrażenia zadawane przez pocisk itp.
Czy można stwierdzić dlaczego tak się dzieje? Czy może potrzebny jest cały kod? Wkleiłem tylko te istotne rzeczy, bo reszta z całością nie ma za wiele wspólnego.

0

Jak ustawiasz tę zmienną?

0

Twoje pytanie zapaliło mi lampkę i ustawiając to w konstruktorze działa jak należy, ale dlaczego ustawiając wartość tak jak jest w pliku nagłówkowym nie aktualizuje się ona? Wiem, że to jest przynajmniej nieczytelny zapis, ale to kod z tutoriala, więc w modyfikacje się nie bawiłem. Inicjalizując zmienną od razu przy tworzeniu w klasie, nie jest to zwykła domyślna wartość? Bo w tym momencie zauważyłem, że działa to jakoś inaczej.

1

Czekaj, jak ustawiasz wartość domyślną poprzez syntax zmienna = wartość w ciele klasy, to zmiana tej wartości nie powoduje zmiany w wykonaniu programu? Przychodzą mi do głowy 2 rzeczy:

  1. masz jakiś PCH i ta zmiana nie jest dostrzegana (może spróbuj full rebuild?)
  2. bug VS (choć 1. brzmi jak bug też)
0

Robiąć rebuilda faktycznie aktualizuje się, ale zwyczajnie kompilując nie ma zmiany, więc to jakiś bug w takim razie? Bo teraz mi przyszło do głowy, że jeśli aktualizuje dopiero przy zmianie typu zmiennej, to czy kompilator nie omija ciała tej klasy jeśli nie zaszła tam zmiana związana z jakimiś deklaracjami? Przy zmianie w konstruktorze wszystko poprawnie działa. Dzięki wielkie za pomoc nie przyszło mi do głowy, że w takim czymś może siedzieć rozwiązanie, a wyglądało mi to bardzo dziwnie.

1

Zobacz czy masz w projekcie włączone precompiled headers (PCH). Jeśli tak, to strzelam, że implementacja nie bierze pod uwagę tego relatywnie nowego elementu w języku (od C++11 można definiować tak zmienne klasy), więc ich modyfikacja tam nie jest brana pod uwagę i używasz starego prekompilowanego nagłówka. Rebuild lub zmiana typu wywołuje kompilację nagłówka od nowa. Przy czym to moje domysły.

0

Puste pole mam w tym miejscu, ale przy tworzeniu nowego projektu domyślnie jest zaznaczone precompiled header, a nie odznaczałem tego. To co przypuszczasz pokrywa się z tym co się dzieje przy zmianie. Ale zmiana parametrów w konstruktorze rozwiązuje sprawę, więc wszystko działa jak należy :) Dzięki za pomoc!

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