Klassen



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



  • Jetzt sagt er aber, dass ein Typspeziefierer erwartet wurde, bei dem Vektor, der nimmt die Anzahl nicht an
    und wenn ich: "na1x8[1].setTexture..." nutzen will dann bietet er mir gar nicht das set... an


Anmelden zum Antworten