Box2d Cocos2dサークルが地面と接触してクラッシュする

これは私の最初の質問ですので、何か間違っている、またはこれが長すぎると、すみません。私は、このチュートリアル Ray
Wenderlichによって、私はそれを修正してより平らで、徐々に丘を下ります。基本的には、私はボールの転がりが険しい丘を下っていますが、現時点では、ボールは約100ピクセル上からしか落ちません。タッチするとアプリがクラッシュします(このアプリはMac
Cocos2d Box2dアプリです)。ボールコードはこれです:

CGSize winSize = [CCDirector sharedDirector].winSize;
self.oeva = [CCSprite spriteWithTexture:[[CCTextureCache sharedTextureCache] addImage:@"Ball.png"]rect:CGRectMake(0, 0, 64, 64)]; 
_oeva.position = CGPointMake(68, winSize.height/2);
[self addChild:_oeva z:1];
b2BodyDef oevaBodyDef;
oevaBodyDef.type = b2_dynamicBody;
oevaBodyDef.position.Set(68/PTM_RATIO, (winSize.height/2)/PTM_RATIO);
// oevaBodyDef.userData = _oeva;
_oevaBody = world->CreateBody(&oevaBodyDef);
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;

bodyDef.position.Set(60/PTM_RATIO, 400/PTM_RATIO);
bodyDef.userData = _oeva;
b2Body *body = world->CreateBody(&bodyDef);

// Define another box shape for our dynamic body.
b2CircleShape dynamicBox;
dynamicBox.m_radius = 70/PTM_RATIO;//These are mid points for our 1m box

// Define the dynamic body fixture.
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox; 
fixtureDef.density = 1.0f;
fixtureDef.friction = 0.3f;
body->CreateFixture(&fixtureDef);

それはうまく動作します。これは地形コードですが、これもうまくいきます:

-(void)generateTerrainWithWorld: (b2World *) inputWorld: (int) hillSize;{
b2BodyDef bd;
bd.position.Set(0, 0);

body = inputWorld->CreateBody(&bd);

b2PolygonShape shape;
b2FixtureDef fixtureDef;
currentSlope = 0;

CGSize winSize = [CCDirector sharedDirector].winSize;    
float xf = 0;
float yf = (arc4random() % 10)+winSize.height/3;
int x = 200;
for(int i = 0; i < maxHillPoints; ++i) {
    hillPoints[i] = CGPointMake(xf, yf);
    xf = xf+ (arc4random() % x/2)+x/2;
    yf = ((arc4random() % 30)+winSize.height/3)-currentSlope;
    currentSlope +=10;
}

int hSegments;

for (int i=0; i< hSegments+1; ++j) {

        pt1.x = p0.x + j*dx;
        pt1.y = ymid + ampl * cosf(da*j);

        fullHillPoints[fullHillPointsCount++] = pt1;

        pt0 = pt1;
    }        

}

b2Vec2 p1v, p2v;
for (int i=0; iCreateFixture(&shape, 0);
}

}

しかし、2つが衝突すると、アプリがクラッシュします。クラッシュエラーは次のとおりです。

スレッド6 CVDisplayLink:プログラム受信信号: “SIGABRT”

エラーは、b2ContactSolver.cppの96行目で発生します。

b2Assert(kNormal > b2_epsilon);

エラーログは次のとおりです。

Assertion failed: (kNormal > 1.19209290e-7F), function
b2ContactSolver, file /Users/coooli01/Documents/Xcode
Projects/Cocos2d/Hill Slide/Hill
Slide/libs/Box2D/Dynamics/Contacts/b2ContactSolver.cpp, line
96.

申し訳ありませんが、私はあまりにも長い間、私は長年にわたってこれに立ち往生してきた。

ベストアンサー

これは健康に見えません:

for (int i=0; i

それ以外は、私にはうまくいきました(ここでは示されていない値の一部を推測しています)。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です