Konstruktor a int main

0

Programuje obiektowo prostą grę przy użyciu sfml -a... I mam taki problem:
W int main potrzebuje wartości z konstruktora klasy Gamer < gracza > za pośrednictwem klasy Maps, dokładnie chodzi o to że:

Clasa Gamer:

class Gamer
{
protected:
	Sprite player;
private:
	Texture players;
	double x_p, y_p;
public:
	Gamer()
	{
	players.loadFromFile( "C:\\Users\\Maciek\\Documents\\Visual Studio 2010\\Projects\\sfml\\Debug\\graph\\players.png" );
	player.setTexture(players);
	player.setOrigin(16, 16);

	**x_p = player.getPosition().x;
	y_p = player.getPosition().y;**
	}
	~Gamer() {} 
// reszta klasy... 

classa Maps (rysuje mapy ładuje grafikę i takie tam ( interesują nas kolizje)):

**int colision(int lvll, int xx, int yy, int goo)** // i tu wszystko jest ok
	{

		bool go = false;
		int fields;
		if (goo==1)
		{
			fields = mapa[lvll][xx/32][(yy/32)-1];
			int * a = find( wals, wals + 10, fields );
			if(a == wals + 10 )
			{
				return go = true;
			}
		}
		if (goo==2)
		{
			fields = mapa[lvll][xx/32][(yy/32)+1];
			int * a = find( wals, wals + 10, fields );
			if(a == wals + 10 )
			{
				return go = true;
			}

		}
		if(goo=4)
		{
			fields = mapa[lvll][(xx/32)+1][yy/32];
			int * a = find( wals, wals + 10, fields );
			if(a == wals + 10)
			{
				return go = true;
			}
		}
		if(goo==3)
		{
			fields = mapa[lvll][(xx/32)-1][yy/32];
			int * a = find( wals, wals + 10, fields );
			if(a == wals + 10 )
			{
				return go = true;
			}
		}
}

W int main mam chciałbym użyć funkcji kolizje parametrem z konstruktora Gamer <x_p zamiast xx, y_p zamiast yy >

Napisałem to tak:

if(Keyboard::isKeyPressed(Keyboard::Up)) // ruch odpowiedzialna za ruch postaci zmieniają się tylko parametry w zależności od strony 
			{
				**if(maps.colision(lvl, x_p, y_p, go = 1)**
				{
					gamer.ruch(0,-32 * KrokCzasowy.asSeconds() * speed,4);
				}
			}

Komunikat o błędzie nie zdeklarowano x_p, y_p. I oto jest problem, prosił bym o pomoc i wytłumaczenie w programowaniu obiektowym jestem nowy :v

0

Co prawda nie znam do końca SFML (programowałem tylko w SDL), ale wydaje mi się, że problem tkwi w samym C++:
Nie rozumiem takiej rzeczy.

**x_p = player.getPosition().x;
    y_p = player.getPosition().y;**

Jak ma działać ten kod?
Ale wracając do problemu, jeśli dobrze zrozumiałem to problem tkwi w tym, że chcesz użyć współrzędnych obiektu Gamer w metodzie klasy Maps, tak? Jeśli tak to w klasie Gamer współrzędne te masz jako private, więc nie możesz ich użyć w innym obiekcie. Żeby móc to zrobić możesz na przykład obiekt klasy Gamer dać jako składnik klasy Maps, albo współrzędne obiektu Gamer porównywać z elementami mogącymi wchodzić w kolizję z klasy Maps.

0

Klasa Maps dziedziczy po klasie Gamer, w niej jest funkcja o którą pytałeś:

x_p = player.getPosition().x;

player to Sprite do którego przypisana jest konkretna Textura położenie itd..., natomiast .getPosition() to akcja odnosząca się do tego sprajta <sprawdza pozycje względem osi> .x <konkretnie względem osi x > analogicznie do x działa druga taka sama funkcja tylko z y. W int main() ma obiekt maps utworzony dla klasy Maps, Klasa ta zawiera np metodę kolizje która pracuje na kilku wartościach między innymi xx oraz yy są to współrzędne właśnie względem osi obiektu którego kolizje chcemy badać. W innej Gamer < dotyczącej gracza > mam właśnie opisane wyżej funkcje getPosition() w konstruktorze. Teraz chciał bym to połączyć w int main()

na zasadzie że do metody kolizje < metoda klasy Maps > podstawiam x_p, y_p < zawarte w konstruktorze Gamer > w miejsce xx i yy < wartości na których pracuje metoda kolizje >

0

Nie masz dostępu do zmiennych bo są prywatne/chronione, proste.
Quickfix to dorobić settery, czyli do klasy Gamer dopisać metode

sf::Vector2f Gamer::getData(){
return sf::Vector2f(x_p,y_p);
}
maps.colision(lvl, gamer.getData().x, gamer.getData().y, go = 1

Inną sprawą jest to że Klasa Maps dziedziczy po klasie Gamer, to bzdura jakaś.
Mapa nigdy nie była graczem, a gracz podobny do mapy też nie jest.
Powinieneś utworzyć osobne klasy.

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