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
Da bin ich überfragt
Zeige bitte mal wie der Player übergeben wird und letzten endes beim Asteroiden landet, Funktionrumpf reicht.
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
// ... public: std::unique_ptr<Player> mPlayer; // ... |
C-/C++-Quelltext |
|
1 |
std::unique_ptr<PlayState> mPlayState = std::make_unique<PlayState>(); |
C-/C++-Quelltext |
|
1 2 3 4 5 |
// ... randOffset() + mPlayState->mPlayer->getCurrentX(), // ... |
Wie kommt Playstate in Asteroid?
Ich habe mich kurz eingelesen aber könnte mich irren:
Muss man das nciht mit einem Move machen?
Das Experiament war aber Erfolglos. Sonst ist "PlayState" nicht in "Asteroid" drin.
Muss man das nciht mit einem Move machen?
Asteroid.cpp:Dann Zeige bitte wie es im Ursprungscode war!
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
std::unique_ptr<Player> mPlayer = std::make_unique<Player>(); // ... // loadAsteroid // Auf die x-Position des Spielers wird ein zufälliger offset addiert. // Die Asteroiden werden außerhalb des Bildschirms gesetzt, // damit keine unschönen Effekte erzeugt werden. mSprite.setPosition( randOffset() + mPlayer->getCurrentX(), -10.f); |
Ich weiß gerade nicht was ich sinnvolles sagen soll!
Ist das dein ernst!?
Du erstellst jedes mal in Asteroid.cpp einen neuen player und wunderst warum jedesmal wenn ein neuer Asteroid erstellt wird, die Werte so sind sie sind.
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
#include "asteroid\include\Asteroid.hpp" #include "gameStates\states\include\PlayState.hpp" std::unique_ptr<Player> mPlayer = std::make_unique<Player>(); Asteroid::Asteroid() : m_bAlive(true) , m_fCurrentXPos(0.f) , m_fCurrentYPos(0.f) { } void Asteroid::Init(Game &game) { loadAsteroid(game); } void Asteroid::Update() { mSprite.move(0.f, m_fSpeed); // Asteroid bewegen mSprite.rotate(0.09f); // Asteroid rotieren // Wenn der Asteroid außerhalb vom Bildschirm ist, dann deaktivieren if (mSprite.getPosition().y >= 570.f) m_bAlive = false; } bool Asteroid::CheckCollision(sf::Sprite &sprite) { // Überschneiden sich der Asteroid mit dem angegbenen Sprite? if (sprite.getGlobalBounds().intersects(mSprite.getGlobalBounds())) { // Kollision! m_bAlive = false; return true; } else return false; } void Asteroid::Render(sf::RenderWindow &App) { App.draw(mSprite); } void Asteroid::loadAsteroid(Game &game) { mTexture.setSmooth(false); // Mittelpunkt ist genau in der Mitte der Textur mSprite.setOrigin( game.mManager->getTexture(RessourcenManager::ASTEROID).getSize().x / 2.f, game.mManager->getTexture(RessourcenManager::ASTEROID).getSize().y / 2.f); mSprite.setTexture(game.mManager->getTexture(RessourcenManager::ASTEROID)); mSprite.setScale(0.5f, 0.5f); // auf 50% verkleinern // Auf die x-Position des Spielers wird ein zufälliger offset addiert. // Die Asteroiden werden außerhalb des Bildschirms gesetzt, // damit keine unschönen Effekte erzeugt werden. mSprite.setPosition( randOffset() + mPlayer->getCurrentX(), -10.f); std::cout << "Player: " << mPlayer->getCurrentX() << std::endl; std::cout << "Asteroid: " << mSprite.getPosition().x << std::endl << std::endl; } float Asteroid::randOffset() { int xOffset = std::rand() % 100 + 2; std::cout << "offset: " << xOffset << std::endl; return xOffset; } |
Werbeanzeige