2017-12-19 5 views
0

Ich versuche, meinen Charakter auf einer Plattform in meinem eigenen SDL2-basierten Framework landen zu lassen. Zur Zeit funktioniert es nicht, wenn ich mehr als eine Plattform habe, was standardmäßig ist, wenn ich eine spawne. Der Charakter bleibt nur auf der letzten hinzugefügten Plattform. der Rest wird langsam durchfallen, während der grounded boolesche Schalter von true zu false wechselt.Wie stelle ich sicher, dass ein boolscher Wert wahr bleibt, während ich auf Kollision überprüfe

hier ist mein Code:

void NHTVScene::EntitiesGrounded() 
{ 
    std::vector<Entity*>::iterator it = platformVector.begin(); 
    while (it != platformVector.end()) { 
     if (player->isColliding((*it))) { 
     player->velocity = Vector2(0, 0); 
     player->grounded = true; 
    } 
    else if (!player->isColliding((*it))) { 
     player->grounded = false; 
    } 

    it++; 
    } 
} 

diese Funktion jedes Update DELTA aufgerufen wird.

ich weiß, dass dieser Code es so macht, dass mit jeder Plattform, die nicht kollidiert, dass der Boolesche Wert auf True festgelegt wird, aber ich finde es komisch, dass es das nicht auf dem neuesten Eintrag tut, und ich habe keine Tipp, wie man das richtig macht.

Ich hoffe, dies ist genug Informationen, um ein wenig Einblick in mein Problem zu geben. Wenn nicht, lass es mich wissen und ich werde mehr liefern.

+0

Sie möchten wahrscheinlich aus der Schleife "brechen", sobald Sie feststellen, dass der Charakter tatsächlich geerdet ist. –

+0

das hat funktioniert. Danke vielmals. damit habe ich mich lange gestritten. Eines dieser Dinge, wo ich es zu lange anstarrte –

Antwort

0
  1. Es ist einfacher, die while und if else Klausel mit der richtigen Vertiefung zu unterscheiden, beachten Sie bitte die verschachtelten Einrückungen etwas klare Formatierung.
  2. Ich mache eine Annahme, dass isColliding(Entity) ist ein Boolean und daher prüfen, falsch nach bereits Prüfung der Richtigkeit sollte nicht notwendig sein. Erwäge, diese Logik zu vereinfachen.
  3. Wenn Sie den Player nach Erkennen einer Kollision als geerdet einrichten möchten, sollte dies Ihr Ausgangskriterium sein.

So etwas sollte tun, was Sie suchen.

void NHTVScene::EntitiesGrounded() 
{ 
    std::vector<Entity*>::iterator it = platformVector.begin(); 
    while (it != platformVector.end()) 
    { 
     if (player->isColliding((*it))) 
     { 
      player->velocity = Vector2(0, 0); 
      player->grounded = true; 
      break; // exit criteria met 
     } 
     else 
     { 
      player->grounded = false; 
     } 
     it++; 
    } 
} 
Verwandte Themen