1

私はcocos2dの物理学に不慣れです。私はシマリスを使用していますが、2つのオブジェクトが衝突すると、スポンジやゴムでできている場合のように、「柔らかく」なります。

私のコード:

cpInitChipmunk();  
space = cpSpaceNew();  
space->gravity = cpv(0, 0);  
schedule(schedule_selector(HelloWorld::step), 1.0f/60.f);
astroBody = cpBodyNew(100, INFINITY);  
astroBody->p = cpv(512,384);
cpSpaceAddBody(space, astroBody);
int num2 = 8;
cpVect vertsAstro[] =  {
    cpv(-17.0f, -44.9f),
    cpv(-29.5f, -33.2f),
    cpv(-32.9f, -13.1f),
    cpv(-24.0f, 11.7f),
    cpv(24.6f, 11.5f),
    cpv(32.9f, -12.9f),
    cpv(29.3f, -33.1f),
    cpv(17.0f, -44.7f)
};
astroShape = cpPolyShapeNew(astroBody, num2, vertsAstro, cpv(0,0));
astroShape->e = 0.0f;
astroShape->u = 0.0f;
astroShape->collision_type = 0; 
astroShape->data = player;
cpSpaceAddShape(space, astroShape);

cpBody *box = cpBodyNew(INFINITY, INFINITY);  
box->p = cpv(z->getPosition().x+32, z->getPosition().y+32); 
int num = 5;
cpVect verts[] = {
    cpv(-32, -32),
    cpv(-32, 32),
    cpv(32, 32),
    cpv(32, -32),
    cpv(-32, -32)
};
cpShape *boxShape = cpPolyShapeNew(box, num, verts, cpv(0,0));
boxShape->e = 0.0f;
boxShape->u = 0.0f;
boxShape->collision_type = 1;  
boxShape->data = z;
cpSpaceAddStaticShape(space, boxShape);

したがって、これらのオブジェクトは衝突していて、柔らかすぎます。どういうわけか、2つの石がぶつかったように見せることはできますか?

4

2 に答える 2

2

Chipmunk5を使用している必要があります。shape->e=1.0などのフィールドを直接設定する必要があります。

getter /setter関数はChipmunk6の一部です。フィールドを直接設定することもできますが、値を変更するとsetter関数がオブジェクトを自動的にウェイクアップするため、設定しないことをお勧めします。

于 2012-05-05T01:30:30.100 に答える
1

ドキュメントから:

void cpShapeSetElasticity(cpShape *shape, cpFloat value)

形状の弾力性。0.0の値はバウンスを与えませんが、1.0の値は「完全な」バウンスを与えます。ただし、1.0以降を使用したシミュレーションは不正確であるため、お勧めしません。衝突の弾力性は、個々の形状の弾力性を掛け合わせることによって求められます。

これは役に立ちますか?

于 2012-05-04T16:43:20.320 に答える