簡體   English   中英

如何獲取b2Body並將其在屏幕上移動? (cocos2d,box2d,iphone)

[英]How to grab a b2Body and move it around the screen? (cocos2d,box2d,iphone)

我想在屏幕周圍移動屏幕上觸摸的任何b2body。 我聽說過一些關於老鼠關節的事情。

我發現: http : //iphonedev.net/2009/08/05/how-to-grab-a-sprite-with-cocos2d-and-box2d/

但是如果我只是將ccTouch方法復制到一個新項目中(當然,標頭中的變量),我也會給我帶來很多錯誤。 例如world-> Query <-沒有找到會員

可能有人做一個tut /一個新項目並在這里上傳。 或者,還有更好的方法?

首先,您必須創建b2QueryCallback子類:

class QueryCallback : public b2QueryCallback
{
public:
    QueryCallback(const b2Vec2& point)
    {
        m_point = point;
        m_object = nil;
    }

    bool ReportFixture(b2Fixture* fixture)
    {
        if (fixture->IsSensor()) return true; //ignore sensors

        bool inside = fixture->TestPoint(m_point);
        if (inside)
        {
             // We are done, terminate the query.
             m_object = fixture->GetBody();
                 return false;
        }

        // Continue the query.
        return true;
    }

    b2Vec2  m_point;
    b2Body* m_object;
};

然后在您的touchBegan方法中:

    b2Vec2 pos = yourTouchPos;
// Make a small box.
b2AABB aabb;
b2Vec2 d;
d.Set(0.001f, 0.001f);
aabb.lowerBound = pos - d;
aabb.upperBound = pos + d;

// Query the world for overlapping shapes.
QueryCallback callback(pos);
world_->QueryAABB(&callback, aabb);         

b2Body *body = callback.m_object;
if (body)
    {
        //pick the body
    }

我看到有兩種方法可以控制拾取的身體。 您會注意到,第一個是創建mouseJoint,第二個是使您的身體運動並控制它的速度(而不是位置!-碰撞時它將提供非物理行為,因為速度為零)。 在第一種情況下,如果您將快速移動對象,則移動時會有些延遲。 我自己沒有嘗試第二種方法,因為在這種情況下,該物體不會與其他運動和靜態物體碰撞。

另外,您可能希望在移動時鎖定身體的旋轉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM