In deinem ersten Beitrag ist davon nichts zu sehen.
Oh tut mir leid, habe ich wohl vergessen zu kopieren
Ausserdem sieht es so aus, dass du die Liste der Asterioden 3x durchläufst, das könntest du auf einen durchlauf reduzieren.
Meinst du das so:
|
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
|
{
#pragma region texte
txtLive.setString("Leben: " + std::to_string(m_iLive));
txtPoints.setString("Punkte: " + std::to_string(m_iPoints));
#pragma endregion texte
mPlayer->Update();
// Jeden Asteroiden durchgehen und updaten, Kollisionen prüfen und Rendern
for (auto &it : mAsteroidList)
{
it.CheckCollision(mPlayer->getSprite());
it.Update();
it.Render(game.App);
}
// Wenn der Asteroid nicht am Leben ist, dann von der Liste entfernen
it = mAsteroidList.begin();
while (it != mAsteroidList.end())
{
bool isAlive = it->getAlive();
if (!isAlive)
{
it = mAsteroidList.erase(it++);
}
else
++it;
}
// Neue Asteroiden erstellen
SpawnAsteroid();
std::cout << mAsteroidList.size() << std::endl;
}
|
Weiterhin würde ich das Sprite der Funktion CheckCollision als Referenz oder Pointer übergen, wenn es denn ein Sprite sein muss weil ein Rect würde hier ja vollkommen ausreichen.
Ist das richtig?
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
|
void Asteroid::CheckCollision(sf::Sprite &sprite)
{
// Überschneiden sich der Asteroid mit dem angegbenen Sprite?
if (sprite.getGlobalBounds().intersects(mSprite.getGlobalBounds()))
{
// Kollision!
m_bAlive = false;
}
}
|
Schmeiß windows.h aus dem header raus, das ding treibt die compilierzeit in die Höhe. Includiere solche großen header nur dort wo du sie brauchst.
Den Zufallsgenerator solltest du nur einmal am Programmanfamg initialisieren.
Die
windows.h brauche ich aber, um eine Zufallszahl zu generieren. Ich habe das include und das
sarnd(timeGetTime()); in den Game-Konstruktor geschreiben, oder soll ich es in die Main.cpp schreiben?