2017-12-19 13 views
0

自分のキャラクターが私自身のSDL2ベースのフレームワークのプラットフォームに着陸しようとしています。現在のところ、私は複数のプラットフォームを持っている場合、私は1つを生成する場合、デフォルトであるために動作していません。キャラクターは最後に追加されたプラットフォームにのみ留まります。残りは徐々に落ち、groundedブール値はtrueからfalseに切り替わります。この機能は、すべてのdeltatime更新どのように私はブール値が真のままであることを確認して衝突をチェックするのですか?

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++; 
    } 
} 

と呼ばれる:

は、ここに私のコードです。

このコードは、ブール値がtrueに設定されているのと衝突していないすべてのプラットフォームで、最新のエントリでは実行しないという奇妙なものだと思います。これを正しく行う方法を手がかりにしてください。

私はこれが私の問題を洞察するのに十分な情報であることを望みます。そうでない場合は、私に知らせてください、私はより多くを供給します。

+0

文字が実際に接地されていることがわかると、おそらくループから外れてしまいます。 –

+0

が働いた。どうもありがとう。私は長い間、これで苦労していた。私が長い間それを注視してきたものの1つ –

答えて

0
  1. 適切な字下げを使ってwhileif else句を区別しやすくなり、少し明確にネストされたインデントレベルの書式設定を検討してください。
  2. 私は、isColliding(Entity)がブール値であることを前提にしているので、すでにtrueをチェックしてからfalseをチェックする必要はありません。このロジックを単純化することを検討してください。
  3. 衝突を検出した後にプレーヤを接地した状態にしたい場合は、終了基準にする必要があります。

何かお探しのものがありますか?

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++; 
    } 
} 
関連する問題