Globale Variable Hochzählen C++ for Schleife?

4 Antworten

id kann nie > 149 bzw mindestens 150 werden, da die Schleife nur für id < 149, also höchstens 148 ausgeführt wird.

Deine If Abfrage kann nie erfüllt werden, da der höchste Wert in deiner Schleife nur 148 ist.

Innerhalb der For-Schleife kann id niemals größer werden als 149. Somit ist Dein kompletter if-Block für die Füße. Außerdem hast Du gar keine globale Variable.

Die Schleife läuft einmal von 0 bis 148 inklusive und fertig. Was ist es, was Du eigentlich willst?

lollo246 
Fragesteller
 29.05.2019, 16:07

Ok, dass ich keine Globale Variable habe ist jetzt auch bewusst, da ich die variable in der for schleife deklariert habe. wie kann ich diese for-Schleife unendlich oft wiederholen, da wie man sieht ich die id als string mit text in ein const char* umwandle um eine Textur zu Laden. Also ich will dass es dann immer ein anderes Bild anzeigt indem es die ID erhöht. Und wenn es das 149 bzw. das 150 Bild erreicht hates wieder bei 0 beginnt. Geht das mit einer while(true) schleife?

0
ohwehohach  29.05.2019, 16:10
@lollo246

Hast Du denn unendlich viele Texturen? Wenn nein, dann wäre es zwar ander eleganter, aber Du könntest beispielsweise folgendes tun:

int i = 0;
while (true)
{
  // Lade Bild für aktuelles i
  ...

  // Erhöhe i bis max. 149
  i = (i + 1) % 150

  // Beende die Schleife, wenn alle Bilder geladen wurden
  ...
}
0
lollo246 
Fragesteller
 29.05.2019, 16:17
@ohwehohach

Erstmal vielen Dank für deine Schnelle Antwort, ich stehe nur gerade etwas auf dem Schlauch. Wenn i = (i+ 1) % 150 ist und ich danach nochmal den code zum laden Aufrufe, wird dass dann für jede ID übernommen oder wie muss ich das jetzt verstehen.

while (true)

{

std::string pic_id = "LASER_" + std::to_string(id);

const char* pic_name = pic_id.c_str();

DrawSprite2("LASER2", pic_name, Menu::Settings::menuX, 0.0820f, 0.21f, 0.090f, 0, Menu::Settings::titleTexture.r, Menu::Settings::titleTexture.g, Menu::Settings::titleTexture.b, Menu::Settings::titleTexture.a);

id = (id + 1) % 150;

std::string pic_id = "LASER_" + std::to_string(id);

const char* pic_name = pic_id.c_str();

DrawSprite2("LASER2", pic_name, Menu::Settings::menuX, 0.0820f, 0.21f, 0.090f, 0, Menu::Settings::titleTexture.r, Menu::Settings::titleTexture.g, Menu::Settings::titleTexture.b, Menu::Settings::titleTexture.a);

}

Etwa so?? Oder fehlt jetzt etwas?

0
ohwehohach  29.05.2019, 16:22
@lollo246

Ich verstehe nicht, was dieser Code tun soll. Du lädst jetzt das Bild für das aktuelle "i" und machst was damit. Dann wird das neue i ausgerechnet (also entweder i+1, wenn i < 150 oder 0, wenn i == 150, denn das macht die Zeile i = (i + 1) % 150). Dann lädst Du direkt das Bild für das nächste i und machst was damit.

Im nächsten Schleifendurchlauf lädst Du jetzt dasselbe Bild nochmal und machst nochmal dasselbe damit, bevor Du dann das nächst Bild lädst und was damit machst...

So wie es da jetzt steht, wird jedes Bild, bis auf das allererste, zweimal behandelt.

Und die Schleife endet nie.

0

Der Schleifeninhalt wird unter der Bedingung, dass id < 149 wahr ist, ausgeführt. Nun fragst du als erstes innerhalb der Schleife, ob id > 149, was niemals der Fall sein kann.