Klassen



  • 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.



  • Fehler 7 error C2065: 'na1x8': nichtdeklarierter Bezeichner C:\Users\Jojo\documents\visual studio 2012\Projects\SPIEL_01-SFML\SPIEL_01-SFML\player.cpp 21 1 SPIEL_01-SFML

    das beim vektor erstellen:
    Fehler 1 error C2143: Syntaxfehler: Es fehlt ';' vor '<' c:\users\jojo\documents\visual studio 2012\projects\spiel_01-sfml\spiel_01-sfml\player.h 36 1 SPIEL_01-SFML

    Fehler 12 error C2228: Links von ".setPosition" muss sich eine Klasse/Struktur/Union befinden. C:\Users\Jojo\documents\visual studio 2012\Projects\SPIEL_01-SFML\SPIEL_01-SFML\player.cpp 23 1 SPIEL_01-SFML
    Fehler 8 error C2228: Links von ".setTexture" muss sich eine Klasse/Struktur/Union befinden. C:\Users\Jojo\documents\visual studio 2012\Projects\SPIEL_01-SFML\SPIEL_01-SFML\player.cpp 21 1 SPIEL_01-SFML
    Fehler 10 error C2228: Links von ".setTextureRect" muss sich eine Klasse/Struktur/Union befinden. C:\Users\Jojo\documents\visual studio 2012\Projects\SPIEL_01-SFML\SPIEL_01-SFML\player.cpp 22 1 SPIEL_01-SFML
    Fehler 3 error C2238: Unerwartete(s) Token vor ';' c:\users\jojo\documents\visual studio 2012\projects\spiel_01-sfml\spiel_01-sfml\player.h 36 1 SPIEL_01-SFML
    Fehler 6 error C2238: Unerwartete(s) Token vor ';' c:\users\jojo\documents\visual studio 2012\projects\spiel_01-sfml\spiel_01-sfml\player.h 36 1 SPIEL_01-SFML
    Fehler 2 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\users\jojo\documents\visual studio 2012\projects\spiel_01-sfml\spiel_01-sfml\player.h 36 1 SPIEL_01-SFML
    Fehler 5 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\users\jojo\documents\visual studio 2012\projects\spiel_01-sfml\spiel_01-sfml\player.h 36 1 SPIEL_01-SFML
    14 IntelliSense: Der Bezeichner ""na1x8"" ist nicht definiert. c:\Users\Jojo\Documents\Visual Studio 2012\Projects\SPIEL_01-SFML\SPIEL_01-SFML\player.cpp 21 2 SPIEL_01-SFML



  • Sieht danach aus, als sei std::vector nicht richtig bekannt. Header eingebunden?



  • bei player.h ja aber bei player.cpp nein 😃


Anmelden zum Antworten