Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

31

07.10.2015, 21:12

Im Übrigen ist das genau das Gleiche wie wir dir hier schon vorgeschlagen haben (std::min und std::max). Nur eben eine wesentlich längere und unübersichtlichere Methode.
Das ist mir schon klar :) . Das Problem ist, dass zwar die Kamera stoppt, aber wenn ich dann nochmal die Taste gedrückt halte, bewegt sich wieder die Kamera. Und nach ca 1s wird diese wieder auf die richtige Position gesetzt wird. Ich habe so das Gefühl, dass ich die Methoden in der falschen Reihenfolge aufrufe...

32

07.10.2015, 21:20

Dann poste doch mal den kompletten relevaten Code hier. Und nicht immer irgendwelche Bruchstücke...

33

07.10.2015, 21:58

Hast recht. Vergiss was ich geschrieben hab ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

34

07.10.2015, 22:11

Dann poste doch mal den kompletten relevaten Code hier.
Das habe ich ja auch schon mehrfach gefordert. Zumindest mal die komplette ProcessEvents-Methods zu zeigen scheint wohl sinnvoll.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

35

08.10.2015, 19:10

Tut mir leid wegen der späten Antwort, aber die der Code:

Game.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Game::ProcessEvents()
{
    while (App.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            App.close();

        if (event.type == sf::Event::GainedFocus)
            mPause = false;

        if (event.type == sf::Event::LostFocus)
            mPause = true;

        m_CurrentState->ProcessEvents(*this);
    }
}


Player.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    // Der schwarze rest soll nicht gesehen werden, also die View stoppen
    //

    mPlayerView.setCenter(
        std::max(310.f, std::min(2150.f, mPlayerSprite.getPosition().x)), 
        std::max(310.f, std::min(1000.f, mPlayerSprite.getPosition().y)));

    //cam.x = mPlayerSprite.getPosition().x;
    //cam.y = mPlayerSprite.getPosition().y;

    //if (cam.x - 640.f / 2 < 640.f)
    //  cam.x = 310.f + 640.f / 2;

    //if (cam.x + 640.f / 2 > 2150.f)
    //  cam.x = 2150.f - 640.f / 2;

 
    // Points-Text
    txtPoints.setString(std::to_string(m_iPoints));

}

36

08.10.2015, 19:16

Was verstehst du eigentlich nicht an "allen relevanten code"?

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

37

08.10.2015, 20:23

Den Code, der sich um die View kümmert, oder was brauchst du noch an Code?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

38

08.10.2015, 20:53

Poste doch einfach mal die komplette Methode, in der die View-Korrektur drin steckt und vielleicht sogar noch die komplette Methode von der aus diese aufgerufen wird. Sonst können wir doch echt nur raten, was das Problem sein könnte. Der Code mit min/max an sich ist ja logisch richtig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

39

08.10.2015, 21:11

Konstruktor in Player.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Player::Player()
    : playerSpeed(3.f)
    , mLife(10)
    , m_iPoints(0)
    , m_bIsAlive(true)
    , up(false)
    , down(false)
    , left(false)
    , left_up(false)
    , left_down(false)
    , right(false)
    , right_up(false)
    , right_down(false)
{
    //std::unique_ptr<Shot> mShot = std::make_unique<Shot>();

    loadTexture();

    mPlayerSprite.setPosition(sf::Vector2f(400.f, 400.f));
    //mPlayerSprite.setPosition(0, 0);
    mPlayerSprite.setOrigin(mPlayerTexture.getSize().x / 2.f, mPlayerTexture.getSize().y / 2.f);

    // Die View
    mPlayerView.setSize(sf::Vector2f(768.f, 768.f));
    mPlayerView.setCenter(mPlayerSprite.getPosition().x, mPlayerSprite.getPosition().y);
    mPlayerView.setViewport(sf::FloatRect(0, 0, 1, 1));
    mPlayerView.zoom(0.8);
}


Update in Player.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
void Player::Update(Game &game)
{
    // Oben
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::W))
    {
        mPlayerSprite.move(0, -playerSpeed);
        mPlayerView.move(0.f, -playerSpeed);
        txtPoints.move(0.f, -playerSpeed);
        mPlayerSprite.setRotation(atan2(90.f, 90.f) * 360.f / PI);
    }

    // Unten
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::S))
    {
        mPlayerSprite.move(0, playerSpeed);
        mPlayerView.move(0.f, playerSpeed);
        txtPoints.move(0.f, playerSpeed);
        mPlayerSprite.setRotation(atan2(90.f, 90.f) * -360.f / PI);
    }

    // Rechts
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::D))
    {
        mPlayerSprite.move(playerSpeed, 0);
        mPlayerView.move(playerSpeed, 0);
        txtPoints.move(playerSpeed, 0.f);
        mPlayerSprite.setRotation(atan2(180.f, 180.f) * -720.f / PI);
    }

    // Links
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A))
    {
        mPlayerSprite.move(-playerSpeed, 0);
        mPlayerView.move(-playerSpeed, 0);
        txtPoints.move(-playerSpeed, 0.f);
        mPlayerSprite.setRotation(atan2(0.f, 0.f) * 360.f / PI);
    }

    // Oben Rechts
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::W) && sf::Keyboard::isKeyPressed(sf::Keyboard::Key::D))
    {
        mPlayerSprite.setRotation(135.f);
    }

    // Oben Links
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::W) && sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A))
    {
        mPlayerSprite.setRotation(45.f);
    }

    // Unten Rechts
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::S) && sf::Keyboard::isKeyPressed(sf::Keyboard::Key::D))
    {
        mPlayerSprite.setRotation(225.f);
    }

    // Unten Links
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::S) && sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A))
    {
        mPlayerSprite.setRotation(-45.f);
    }

}


ProcessEvents in PlayState.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void PlayState::ProcessEvents(Game &game)
{
    mPlayer->ProcessEvents(game);

    // Wurde Escape gedrückt, dann wieder in Menü wechseln
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
    {
        mPlayer->getPlayerView().reset(sf::FloatRect(0, 0, 1, 1));
        mPlayer->getPlayerView().setViewport(sf::FloatRect(0, 0, 1, 1));
        game.changeState(Game::gameStates::MAINMENU);
        game[0].setView(game[0].getDefaultView());
    }

}


Wenn ihr noch etwas braucht, einfach schreiben :)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

40

08.10.2015, 21:52

Und wo ist da jetzt die View-Korrektur? Komm schon, denk mit...
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige