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
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...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.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Das habe ich ja auch schon mehrfach gefordert. Zumindest mal die komplette ProcessEvents-Methods zu zeigen scheint wohl sinnvoll.Dann poste doch mal den kompletten relevaten Code hier.
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); } } |
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)); } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
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); } |
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); } } |
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()); } } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Werbeanzeige