Problem bei der Player Bewegung in Pong (C++ und SFML)



  • Hallo und Guten Abend!

    Wie Sie vielleicht schon dem Titel entnommen haben, habe ich ein Problem bei der Player Bewegung bei Pong:

    #include "window.hpp"
    #include "Opponent.hpp"
    #include "Player.hpp"
    #include <iostream>
    
    Window1::Window1(){
    
    		RenderWindow window(VideoMode(800, 600), "Pong");
    
    		while (window.isOpen()){
    
    			window.display();
    			window.clear(Color::Black);
    			Ball ball(window);
    			Player player(window);
    
    			Opponent opponent(window);
    
    			Event event;
    			while (window.pollEvent(event)){
    				if (event.type == Event::Closed)
    					window.close();
    
    				if (event.key.code == Keyboard::Down && player.getPosition().y > 10){
    					player.setPosition(player.getPosition().x, player.getPosition().y + 6);
    						std::cout << "Down" << std::endl;
    				}
    				if (event.key.code == Keyboard::Up && player.getPosition().y < 590){
    					player.setPosition(player.getPosition().x, player.getPosition().y - 6);
    					std::cout << "Up!" << std::endl;
    				}	
    
    			}
    		}
    
    		}
    

    In dem oben stehenden Quellcode habe ich nun das Problem, dass jeweils Up! und Down! in der Konsole ausgegeben werden, sich die Position der Instanz player jedoch nicht ändert.
    Ich hoffe, sie können mir helfen!
    Für die aufgewendete Mühe danke ich schonmal im Voraus!! 🙂 😉



  • Jonathan15 schrieb:

    while (window.isOpen()){
        Ball ball(window);
        Player player(window);
        Opponent opponent(window);
        ...
    }
    

    Beachte, dass es sich hier um Konstruktor-Aufrufe handelt, mit denen die deklarierten Variablen mit jedem Schleifendurchlauf neu initialisiert werden.
    D.h. es wird z.B. ein völlig neues Player-Objekt erzeugt, das die Position hat, die ihm im Konstruktor zugewiesen wurde. Die Variablen ausserhalb der
    Schleife zu deklarieren wird dein Problem wahrscheinlich lösen.

    Finnegan


Anmelden zum Antworten