2017-12-19 20 views
0

내 캐릭터가 내 자신의 SDL2 기반 프레임 워크에서 플랫폼에 착륙하도록 노력하고 있습니다. 현재 그것은 하나의 플랫폼을 가지고 있기 때문에 인해 작동하지 않습니다. 하나가 생성되면 기본값입니다. 캐릭터는 마지막으로 추가 된 플랫폼에만 남을 것입니다. 나머지는 천천히 넘어지며 grounded 부울은 true에서 false으로 전환됩니다. 이 기능은 모든 deltatime 업데이트어떻게하면 부울이 충돌을 확인하는 동안 true로 유지되는지 확인합니까

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

이 효과가 있습니다. 고마워. 나는 오래도록 waay 위해 이걸로 싸우고있다. 내가 그걸 오래 꼼짝 않고 바라보고 있었던 것들 중 하나 –

답변

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