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
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 |
#pragma once #include "core\include\Game.hpp" #include <memory> #include <SFML\Graphics.hpp> class Game; class Player { public: Player(); void Update(); void ProcessEvents(); void Render(sf::RenderWindow &App); void loadPlayerAssets(); // getter sf::Sprite getSprite() { return mSprite; }; float getCurrentX() { return m_fCurrentX; }; private: sf::Sprite mSprite; sf::Texture mTexture; float m_fCurrentX = 0.f; const float m_fPlayerSpeed; const float m_fMaxX = 935.f; const float m_fMinX = 20.f; const float m_fMaxY = 515.f; const float m_fMinY = 25.f; }; |
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 |
// ... void Player::Update() { // Aktuelle Position einlesen m_fCurrentX = mSprite.getPosition().x; // Wenn der Spieler außerhalb vom Bildschirm ist, dann stoppen // // x-Achse if (mSprite.getPosition().x < m_fMinX) mSprite.setPosition(20.f, mSprite.getPosition().y); else if (mSprite.getPosition().x > m_fMaxX) mSprite.setPosition(935.f, mSprite.getPosition().y); // y-Achse if (mSprite.getPosition().y < m_fMinY) mSprite.setPosition(mSprite.getPosition().x, 25.f); else if (mSprite.getPosition().y > m_fMaxY) mSprite.setPosition(mSprite.getPosition().x, 515.f); } // ... |
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 |
#pragma once #include "core\include\Game.hpp" #include <memory> class Asteroid { public: Asteroid(); void Init(Game &game); void Update(); bool CheckCollision(sf::Sprite &sprite); void Render(sf::RenderWindow &App); // getter bool getAlive() { return m_bAlive; }; sf::Sprite getSprite() { return mSprite; }; private: void loadAsteroid(Game &game); float randOffset(); private: sf::Texture mTexture; sf::Sprite mSprite; bool m_bAlive; float m_fCurrentXPos; float m_fCurrentYPos; const float m_fSpeed = 0.07f; }; |
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 |
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; } |
Ohne ansatzweise reinzuschauen, nur um nochmal nachzufragen: Du fragst, ob dieses Stück Code funktioniert!?
Wo werden die Meteoriten gespawnt wenn überhaupt. Einfach mal spezifizieren wo genau der Fehler liegt, ist schwer das im Kopf nachzuvollziehen auf die Schnelle ...
Würde sich da was ändern wenn du
C-/C++-Quelltext
1 float getCurrentX() { return mSprite.getPosition().x; };
statt
C-/C++-Quelltext
1 float getCurrentX() { return m_fCurrentX; };
machst?
Wird wohl eher daran liegen das update noch nicht aufgerufen wurde.
Aus dem bisherigen kann man den Fehler nicht lokalisieren
in deiner Update MEthode....führe mal das updaten von m_fCurrentX nach dem Abfragen aus...
Na siehst du da gehts schon los. Ich kenne mich mit SFML nciht aus. Kann an SFML liegen oder allgemein ein Logikfehler...
Werbeanzeige