續之前的問題。
目前正在做一個可以捲動背景的遊戲,可惜完全還不了解其做法。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個點,只留最後七個。
但還是有問題,只是今天時間不夠了,又要後天了。
目前正在做一個可以捲動背景的遊戲,可惜完全還不了解其做法。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個點,只留最後七個。
但還是有問題,只是今天時間不夠了,又要後天了。
留言
張貼留言