Frage von Hondoldar, 35

C++ , SFML Bildschirmgrenze?

Hallo Community , Ich habe jetzt C++ ganz gut drauf und habe vor ein paar Tagen SFML angefangen , Also habe ich mir heute eine Spielfigur erstellt die man mit W,A,S,D bewegen kann allerdings kann man diese auch ausserhalb des Fensters bewegen was ich nicht möchte , ich möchte dass sie sich am Rand entweder nicht mehr weiter bewegen kann ODER sich woanders hin ,,Teleportiert'' z.b. zu vorher festgelegten Koordinaten .

Über Hilfe wäre ich sehr froh :D

Bild(playermodeltextur : http://www.pic-upload.de/view-29808237/playermodel.png.html

Quellcode :

#include <SFML/Graphics.hpp>
#include <iostream>
using namespace sf;


int main()
{
    sf::RenderWindow window(sf::VideoMode(1920, 1080), "SFML works!");
    //Playermodel Textur erstellen
    Texture Playermodeltextur;

    //Playermodel Textur von Bild laden
    Playermodeltextur.loadFromFile("playermodel.png");

    //Sprite für das Playermodel erstellen
    Sprite Playermodelsprite(Playermodeltextur);

    //Startposition des Playermodels festlegem
    Playermodelsprite.setPosition(400, 300);

    //Festlegen wo der Mittelpunkt des Playermodels ist
    Playermodelsprite.setOrigin(12.5, 12.5);
    
    //Geschwindigkeit festlegen
    Clock clock;
    float speed = 0.5f;

    

    //Schriftart
    Font font;
    font.loadFromFile("comicbd.ttf");
    
    //Testtext
    Text testtext("Ich bin ein Test Text", font , 20);
    testtext.setPosition(400, 0);
    testtext.setOrigin(10, 0);

    
    while (window.isOpen())
    {
        sf::Event event;

        float ElapsedTime = clock.restart().asMilliseconds();
        
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
            //Nach Links bewegen
        }if (Keyboard::isKeyPressed(Keyboard::A))
        {
            Playermodelsprite.move(-speed*ElapsedTime,0.f);
            
        }
            //Nach Rechts bewegen
        if (Keyboard::isKeyPressed(Keyboard::D))
        {   
            Playermodelsprite.move(speed*ElapsedTime,0);
        }
            //Nach Oben bewegen
        if (Keyboard::isKeyPressed(Keyboard::W))
        {
            Playermodelsprite.move(0,-speed*ElapsedTime);
        }
            //Nach Unten bewegen
        if (Keyboard::isKeyPressed(Keyboard::S))
        {
            Playermodelsprite.move(0,speed*ElapsedTime);
        }
        
        //Hintergrundfarbe festlegen ( R,G,B )
        window.clear(Color(0, 13, 56));
        //Playermodel zeichnen
        window.draw(Playermodelsprite);
        //Testtext zeichnen
        window.draw(testtext);
        window.display();
    }

    return 0;
}
Antwort
von regex9, 13

Wenn ein bestimmter Punkt auf der Abzissenachse über-/unterschritten wird (0 und Bildschirmbreite), muss sich die aktuelle Geschwindigkeit negieren (um abzuprallen) oder auf Null setzen, um stehenzubleiben. Das gleiche Prinzip wird bei Spielen wie Pong oder Breakout genutzt, falls der Ball gegen die äußere Wand stößt.

Kommentar von Hondoldar ,

Das hilft mir nicht weiter...

Kommentar von regex9 ,

Und wieso nicht? Wo liegt das Problem?

Keine passende Antwort gefunden?

Fragen Sie die Community