6/5 續解決問題

續之前的問題。

目前正在做一個可以捲動背景的遊戲,可惜完全還不了解其做法。framework是cocos2D,然後compile時出現以下問題。

b2Fixture* b2Body::CreateFixture(const b2FixtureDef* def)
{
    b2Assert(m_world->IsLocked() == false);     //這一行出現EXC_BAD_ACCESS(code=2, address=0x5c)
    if (m_world->IsLocked() == true)
    {
        return NULL;
    }
//....以下略

設置斷點的結果,應該是以下出問題:

-(void) createGroundEdgesWithVertices {
    b2PolygonShape groundShape;
    b2FixtureDef groundFixtureDef;
    groundFixtureDef.shape = &groundShape;
    groundFixtureDef.density = 0.0;
   
   
    b2Vec2 left = b2Vec2(-1000.0f/100, 5.0f/100);
    b2Vec2 right = b2Vec2(1000.0f/100, -1.0f/100);
    groundShape.SetAsEdge(left, right);
    groundBody->CreateFixture(&groundFixtureDef);   //就是這一步吧...
}

個人認為,最大原因在於Box2D的版別,比較舊,所以我打算跳過這一步。

本來以上createGroundEdgesWithVertices方法是用來在別的方法裡面的,要製作地面,所以我直接跳過,把製作地面的方法寫到那個方法去:

-(void) createGround{
    int num = 7; //原來是23
    b2Vec2 verts[] = {
        b2Vec2(-1022.5f / 100.0, -20.2f / 100.0),
        b2Vec2(-966.6f / 100.0, -18.0f / 100.0),
        b2Vec2(-893.8f / 100.0, -10.3f / 100.0),
        b2Vec2(-888.8f / 100.0, 1.1f / 100.0),
        b2Vec2(-804.0f / 100.0, 10.3f / 100.0),
        b2Vec2(-799.7f / 100.0, 5.3f / 100.0),
        b2Vec2(-795.5f / 100.0, 8.1f / 100.0),
        b2Vec2(-755.2f / 100.0, -1.8f / 100.0),
        b2Vec2(-755.2f / 100.0, -9.5f / 100.0),
        b2Vec2(-632.2f / 100.0, 5.3f / 100.0),
        b2Vec2(-603.9f / 100.0, 17.3f / 100.0),
        b2Vec2(-536.0f / 100.0, 18.0f / 100.0),
        b2Vec2(-518.3f / 100.0, 28.6f / 100.0),
        b2Vec2(-282.1f / 100.0, 13.1f / 100.0),
        b2Vec2(-258.1f / 100.0, 27.2f / 100.0),
        b2Vec2(-135.1f / 100.0, 18.7f / 100.0),
        b2Vec2(9.2f / 100.0, -19.4f / 100.0),
        b2Vec2(483.0f / 100.0, -18.7f / 100.0),
        b2Vec2(578.4f / 100.0, 11.0f / 100.0),
        b2Vec2(733.3f / 100.0, -7.4f / 100.0),
        b2Vec2(827.3f / 100.0, -1.1f / 100.0),
        b2Vec2(1006.9f / 100.0, -20.2f / 100.0),
        b2Vec2(1023.2f / 100.0, -20.2f / 100.0)
    };
   
    b2PolygonShape chainShape;
    chainShape.Set(verts, num);
   
    //[self createGroundEdgesWithVertices:verts numVerts:num];
}

其實本來是要用b2ChainShape去製作的,但是舊版沒有這個class,沒想到這樣寫又出現一個問題,其實很簡單啦,就是SIGABRT,但成因很簡單,就是預設的b2PolygonShape最多只有八個點而以啊!所以我commet out前面16個點,只留最後七個。

但還是有問題,只是今天時間不夠了,又要後天了。

留言