1. ofxBox2Dでクリック判定

    結構はまったのでメモ。

    b2FixtureにTestPointというメソッドがあるのでそれを使います。mousePressedとかの中でそれぞれのBox2Dオブジェクトに対してマウス座標を渡して判定するかんじです。

    for (b2Fixture* f = body->GetFixtureList(); f; f = f->GetNext())
    {
    if(f->TestPoint(p)){
    return true;
    }
    }

    ただし、TestPointに渡す座標は「Box2Dの」ワールド座標である必要があるので、それに変換してあげる必要があります。単純に、
    b2Vec2 p = b2Vec2(mouseX,mouseY);

    とかだとダメです。ofxBox2dUtils.hに「screenPtToWorldPt」というのを用意してくれてるのでそれを使ってみると、
    b2Vec2 p = screenPtToWorldPt(ofVec2f(mouseX,mouseY));

    というかんじで変換してくれます。これを渡すととれました。

    Posted by Takeya Hikage on 2014年05月09日
    Categories openframeworks