2013-11-02 6 views
0

저는 간단한 2 차원 플랫폼을 만들고 있는데, 생성 된 모든 객체의 값을 모두 찾아야합니다.이 객체는 게임 콜리우드를 나타냅니다. 그래서 x/y 좌표, 너비 및 높이가 모두 필요하므로 플레이어 중 누군가가 플레이어와 충돌하는지 확인할 수 있습니다. 그것은 분명히 매우 간단한 클래스의 난 그냥, 내가 충돌 코드가 필요하지 않는 선수 위치가 collidable의 값을 객체와 충돌 여부를 확인하는 방법이 필요C++ 클래스의 모든 객체의 값을 찾습니다.

class CollidableObject 
{ 
    public: 

    CollidableObject(); 
    virtual ~CollidableObject(); 

    int Height; 
    int Width; 
    DirectX::SimpleMath::Vector2 position; 
    bool collidable; 
}; 

: 같은

클래스 같은데 한 번에 모든 충돌 가능한 객체 값을 얻는 단지 방법. 희망을 분명히했습니다.

+0

해당 객체를 '벡터'또는 '목록'으로 만듭니다. 그것을 반복하고 모든 요소 체크가 플레이어와 충돌하는지 확인하십시오. –

답변

0
class CollisionPred(
public: 
    CollisionPred(Player p) : p_(p) {} 
    bool operator()(const ColiidableObject& o) { 
     // process object and return true if there is a collision, i.e: 
     return o.Height*o.Height + o.Width*o.Width > p_.distance; 
    } 
    private: 
     Player p_; 
; 

int main() { 
    //... 
    std::vector<CollidableObject> v(100); 
    std::vector<CollidableObject>::iterator it = 
          std::find_if(v.begin(), v.end(), CollisionPred()); 
    //... 
} 
0

간단하고 아직, 그냥 collidables의 컬렉션을 반복하는 일의 가장 인기있는 방법은 확인 플레이어 어떤 충돌하는 경우.

vector<CollidableObject> objects; 

for(CollidableObject& obj: objects) 
{ 
    if (obj.position.x - obj.width < player.position.x + player.radius 
    && obj.position.x + obj.width > player.position.x - player.radius 
    && obj.position.y - obj.height < player.position.y + player.radius 
    && obj.position.y + obj.height > player.position.y - player.radius 
    ) 
    // collision happened 

} 
+0

자동 auto obj : CollidableObject for auto obj : objects, 또한 이런 식으로 부분적인 객체를 얻지는 못합니다. find_if는 객체에 반복자를 반환합니다. – 4pie0

+0

그래, 당연히 :) –

+0

고마워요.하지만 어떤 객체도 보지 않고 있어요. 디버깅 할 때 벡터에서 다음과 같이 새로운 객체를 생성합니다. CollidableObject CollidableBox – Rob

관련 문제