Klassen



  • Und da bin ich auch schon wieder, versuche gerade bei einem Programm eine Spieler-Klasse zu erstellen, aber es wird warum auch immer einiges unterstrichen ...

    #include <SFML/Graphics.hpp>
    #include <iostream>
    #include "player.h"
    
    using namespace std;
    using namespace sf;
    
    int main()
    {
        RenderWindow window(VideoMode(800, 800), "Maze between fog");
    
    	Texture gtexture;
    	gtexture.loadFromFile("Data\\ground.png");
    	gtexture.setSmooth(false);
    
    	Texture g2texture;
    	g2texture.loadFromFile("Data\\ground2.png");
    	gtexture.setSmooth(false);
    
    	Sprite ground;
    	ground.setTexture(gtexture);
    	ground.setPosition(45,45);
    
    	Sprite na01;
    	na01.setPosition(500, 80);
    	na01.setTexture(g2texture);
    
    	while(window.isOpen())
    	{
    		Event event;
    		while(window.pollEvent(event))
    		{
    			if(event.type == Event::Closed)
    				window.close();
    			if(Keyboard::isKeyPressed(Keyboard::Escape))
    				window.close();
    		}
    
    		player.Update(window);
    		player.Render(window);
    
            window.clear();
    		window.draw(ground);
    		window.draw(na01);
            window.display();
        }
    
        return 0;
    }
    
    #include <SFML/Graphics.hpp>
    #include <iostream>
    
    class player
    {
    public:
    	void Update(RenderWindow &Window);
    	void Render(RenderWindow &Window);
    	player(String tex);
    
    private:
    	Texture ptexture;
    	Sprite splayer;
    };
    
    #include "player.h"
    
    player::player(String tex)
    {
    	ptexture.loadFromFile("Data\\player.png");
    	ptexture.setSmooth(false);
    
    	splayer.setOrigin(50,50);
    	splayer.setTexture(ptexture);
    };
    
    void player::Update(RenderWindow &Window)
    {
    
    }
    
    void player::Render(RenderWindow &Window)
    {
    	Window.draw(splayer);
    }
    

    soetwas wie: RenderWindow wird im dritten unterstrichen oder im zweiten, im ersten player.[] und auch das String im dritten/zweiten ... auch Sprite und Texture im zweiten!

    Warum das alles? Ich weiß noch nicht wo der Fehler ist, was habe ich bei Klassen falsch verstanden?



  • Unterstreichen ist egal. Wichtig ist, was der Compiler sagt.

    Kleiner tipp am Rande: Bei

    player(String tex)
    

    willst du explicit davor stehen haben.



  • Der Bezeichner "..." ist nicht definiert (RenderWindow)
    Variable window ist kein Typname
    es wurde ein Bezeichner erwartet



  • Im ersten wird player unterstrichen, weil du gar kein Objekt angelegt hast. player ist eine Klasse, du willst aber eine Instanz dieser Klasse.

    In den anderen beiden Dateien hast du keinen Namespace angegeben. Es muss sf::String und sf::Sprite und so weiter heissen.



  • Okay, namespace hat geholfen! Danke dafür.
    Aber was muss ich wegen der Instanz genau machen?



  • ... kannst du c++? Wenn nicht, ist der Einstieg mit SFML nicht geeignet. C++ ist auch keine Sprache, die man mal so aus Spaß an der Freude mit Programmbeispielen aus Tutorials lernt.



  • Ich habe nochmal was dran gemacht:

    #include <SFML/Graphics.hpp>
    #include "player.h"
    
    using namespace sf;
    
    int main()
    {
        RenderWindow window(VideoMode(800, 800), "Maze between fog");
    
    	Texture gtexture;
    	gtexture.loadFromFile("Data\\ground.png");
    	gtexture.setSmooth(false);
    	Sprite ground;
    	ground.setTexture(gtexture);
    	ground.setPosition(45,45);
    
    	Texture g2texture;
    	g2texture.loadFromFile("Data\\ground2.png");
    	gtexture.setSmooth(false);
    
    	Sprite na01;
    	na01.setPosition(500, 80);
    	na01.setTexture(g2texture);
    
    	player p();
    
    	while(window.isOpen())
    	{
    		Event event;
    		while(window.pollEvent(event))
    		{
    			if(event.type == Event::Closed)
    				window.close();
    			if(Keyboard::isKeyPressed(Keyboard::Escape))
    				window.close();
    		}
    
            window.clear();
    		window.draw(ground);
    		window.draw(na01);
    		p().Update(window);
    		p().Render(window);
            window.display();
        }
    
        return 0;
    }
    

    Jetzt faselt der was von einer nicht aufgelösten Externe 😞
    Und ja C++ kann ich nicht ganz, bringe mit der Stück für Stück mit SFML darin bei, ich weiß, dass man das nicht so macht 🙄



  • *mir das
    nicht mit der?!



  • player p();
    irgendetwas damit



  • Dann mach halt irgendwas damit



  • ?
    irgendetwas?



  • player p();
    

    wird leider vom Compiler als Funktionsdeklaration, einer Funktion ohne parameter, die ein Objekt von player zurueckgibt, gelesen (Altlast aus altem C).
    Du musst es bei

    player p;
    

    belassen, bzw in diesem Fall muss es

    plazer p("Irgendein Name");
    

    sein, und an den anderen Stellen auch statt p() nur p hinschreiben. Ist ja keine Funktion, sondern Instanz einer Klasse.



  • Ja okay, stimmt ja.
    Danke für eure Hilfe 😉
    Poste dann mal bald das Ergebnis hiervon



  • Also hier ist schon mal der Code, die player.png muss ich noch erstellen!

    #include <SFML/Graphics.hpp>
    #include <iostream>
    #include <windows.h>
    #include "player.h"
    
    using namespace sf;
    using namespace std;
    
    int main()
    {
        RenderWindow window(VideoMode(750, 750), "Maze between fog");
    
    	Texture gtexture;
    	gtexture.loadFromFile("Data\\ground.png");
    	gtexture.setSmooth(false);
    	Sprite ground;
    	ground.setTexture(gtexture);
    	ground.setPosition(0,0);
    
    	player SP("Spieler");
    
    	int tmp;
    	cout << "Spiel starten? (1/0)" << endl;
    	cin >> tmp;
    	if(tmp == 1)
    	{
    		system("cls");
    		Mouse::setPosition(Vector2i(325,725),window);
    
    		while(window.isOpen())
    		{
    			Event event;
    			while(window.pollEvent(event))
    			{
    				if(event.type == Event::Closed)
    					window.close();
    				if(Keyboard::isKeyPressed(Keyboard::Escape))
    					window.close();
    			}
    
    			window.clear();
    			window.draw(ground);
    			SP.Update(window);
    			SP.Render(window);
    			window.display();
    	   }
    	}else if(tmp == 0)
    	{
    		window.close();
    	}else
    	{
    		cout << "Fehler bei der Eingabe!" << endl;
    		system("Pause >nul");
    	}
        return 0;
    }
    
    #include "player.h"
    #include <iostream>
    #include <Windows.h>
    
    using namespace sf;
    using namespace std;
    
    player::player(String tex)
    {
    	ptexture.loadFromFile("Data\\player.png");
    	ptexture.setSmooth(false);
    	splayer.setOrigin(20,20);
    	splayer.setTexture(ptexture);
    
    	ziel.setSize(Vector2f(50,50));
    	ziel.setPosition(200,0);
    	ziel.setFillColor(Color::Red);
    
    	na.loadFromFile("Data\\ground2.png");
    	na.setSmooth(false);
    
    	na1x8_1.setTexture(na);
    	na1x8_1.setTextureRect(IntRect(0,0,100,750));
    	na1x8_1.setPosition(0,0);
    
    	na1x8_2.setTexture(na);
    	na1x8_2.setTextureRect(IntRect(650,0,750,750));
    	na1x8_2.setPosition(650,0);
    
    	na3x2.setTexture(na);
    	na3x2.setTextureRect(IntRect(350,600,700,750));
    	na3x2.setPosition(350,600);
    
    	na1x1_1.setTexture(na);
    	na1x1_1.setTextureRect(IntRect(100,0,100,100));
    	na1x1_1.setPosition(100,0);
    
    	na1x1_2.setTexture(na);
    	na1x1_2.setTextureRect(IntRect(250,450,100,100));
    	na1x1_2.setPosition(250,450);
    
    	na1x1_3.setTexture(na);
    	na1x1_3.setTextureRect(IntRect(500,450,100,100));
    	na1x1_3.setPosition(500,450);
    
    	na1x2_1.setTexture(na);
    	na1x2_1.setTextureRect(IntRect(100,300,100,200));
    	na1x2_1.setPosition(100,300);
    
    	na1x2_2.setTexture(na);
    	na1x2_2.setTextureRect(IntRect(250,0,100,150));
    	na1x2_2.setPosition(250,0);
    
    	na1x2_3.setTexture(na);
    	na1x2_3.setTextureRect(IntRect(550,0,100,200));
    	na1x2_3.setPosition(550,0);
    
    	na1x2_4.setTexture(na);
    	na1x2_4.setTextureRect(IntRect(550,200,100,200));
    	na1x2_4.setPosition(550,200);
    
    	na1x2_5.setTexture(na);
    	na1x2_5.setTextureRect(IntRect(400,150,100,200));
    	na1x2_5.setPosition(400,150);
    
    	na1x2_6.setTexture(na);
    	na1x2_6.setTextureRect(IntRect(400,350,100,200));
    	na1x2_6.setPosition(400,350);
    
    	na2x1_1.setTexture(na);
    	na2x1_1.setTextureRect(IntRect(350,0,200,100));
    	na2x1_1.setPosition(350,0);
    
    	na2x1_2.setTexture(na);
    	na2x1_2.setTextureRect(IntRect(150,150,200,100));
    	na2x1_2.setPosition(150,150);
    
    	na2x1_3.setTexture(na);
    	na2x1_3.setTextureRect(IntRect(200,300,200,100));
    	na2x1_3.setPosition(200,300);
    
    	na2x1_4.setTexture(na);
    	na2x1_4.setTextureRect(IntRect(150,550,200,100));
    	na2x1_4.setPosition(150,550);
    
    	na2x1_5.setTexture(na);
    	na2x1_5.setTextureRect(IntRect(100,700,200,50));
    	na2x1_5.setPosition(100,700);
    };
    
    void player::Update(RenderWindow &Window)
    {
    	int x,y;
    	x = Mouse::getPosition(Window).x;
    	y = Mouse::getPosition(Window).y;
    	splayer.setPosition(x,y);
    
    	if(splayer.getGlobalBounds().intersects(ziel.getGlobalBounds()))
    	{
    		cout << "Gewonnen!" << endl;
    		system("Pause >nul");
    	}
    
    	if(splayer.getGlobalBounds().intersects(na1x1_1.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na1x1_2.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na1x1_3.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na1x2_1.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na1x2_2.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na1x2_3.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na1x2_4.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na1x2_5.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na1x2_6.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na1x8_1.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na1x8_2.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na2x1_1.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na2x1_2.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na2x1_3.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na2x1_4.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na2x1_5.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}else if(splayer.getGlobalBounds().intersects(na3x2.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    	}
    }
    
    void player::Render(RenderWindow &Window)
    {
    	Window.draw(na1x1_1);
    	Window.draw(na1x1_2);
    	Window.draw(na1x1_3);
    	Window.draw(na1x2_1);
    	Window.draw(na1x2_2);
    	Window.draw(na1x2_3);
    	Window.draw(na1x2_4);
    	Window.draw(na1x2_5);
    	Window.draw(na1x2_6);
    	Window.draw(na1x8_1);
    	Window.draw(na1x8_2);
    	Window.draw(na2x1_1);
    	Window.draw(na2x1_2);
    	Window.draw(na2x1_3);
    	Window.draw(na2x1_4);
    	Window.draw(na2x1_5);
    	Window.draw(na3x2);
    
    	Window.draw(splayer);
    	Window.draw(ziel);
    }
    
    #include <SFML/Graphics.hpp>
    
    using namespace sf;
    
    class player
    {
    public:
    	void Update(RenderWindow &Window);
    	void Render(RenderWindow &Window);
    	explicit player(String tex);
    
    private:
    	Texture ptexture;
    	Sprite splayer;
    	RectangleShape ziel;
    
    	Texture na;
    	Sprite na3x2;
    	Sprite na1x8_1;
    	Sprite na1x8_2;
    	Sprite na1x1_1;
    	Sprite na1x1_2;
    	Sprite na1x1_3;
    	Sprite na1x2_1;
    	Sprite na1x2_2;
    	Sprite na1x2_3;
    	Sprite na1x2_4;
    	Sprite na1x2_5;
    	Sprite na1x2_6;
    	Sprite na2x1_1;
    	Sprite na2x1_2;
    	Sprite na2x1_3;
    	Sprite na2x1_4;
    	Sprite na2x1_5;
    };
    

    das war viel Arbeit, aber ich bin zufrieden 😋



  • ich habe selber noch, ein paar kleine Fehler korrigiert 😃





  • lern schleifen und container. Damit kannst du den Code bestimmt auf die Haelfte reduzieren.



  • war mir klar, ich bin so oder so bereits etwas am ändern, um paar teile zu verkürzen! Funkt zwar noch nicht alles, aber mal schauen 🙄



  • ich verkürze gerade mit vektoren!
    wenn ich auf diesen Vektor "vector<Sprite> na1x1;" zum Beispiel mit "na1x1[0].setTexture(na);" zugreifen will, sagt er, dass das kein deklarierter Bezeichner wäre ... 😕



  • Kopiere mal vollständige Fehlermeldung und gibt mehr Kontext vom Code, der sie erzeugt.


Log in to reply