0

私のゲームでは、キャラクターが歩くことができる約 20 個のブロックがあります。各ブロックにはボディがあり、キャラクターにもボディがあります。

私のキャラクターが歩くと、何かに遮られることがあります。これが発生した場合、反対側に少し歩いてから戻ることで、目に見えない壁を「削除」できます。

私の知る限り、私は何も悪いことをしていません。ブロック/キャラクターを描画するために使用するコードは次のとおりです。

キャラクター:

    b2BodyDef raymanBodyDef;


    raymanBodyDef.type = b2_dynamicBody;
    raymanBodyDef.position.Set(winsize.width/2/PTM_RATIO, winsize.height/2/PTM_RATIO);


    raymanBody = world->CreateBody(&raymanBodyDef);
    bodyUserData *bud = new bodyUserData;
    bud->bodytype = 1;
    bud->sprite = rayman;
    raymanBody->SetUserData(bud);

    b2PolygonShape raymanShape;
    raymanShape.SetAsBox(16.5/ PTM_RATIO, 32.5/PTM_RATIO);



    b2FixtureDef raymanShapeDef;
    raymanShapeDef.shape = &raymanShape;
    raymanShapeDef.density = 10.0f;
    raymanShapeDef.friction = 0.0f;
    raymanShapeDef.restitution = 0;
    raymanBody->SetFixedRotation(true);
    raymanBody->CreateFixture(&raymanShapeDef);

ブロック:

Block *b = new Block(40, 125);
this->addChild(b->sprite);
blocks.push_back(b);
b2Body *blockbody;
    for(int i = 0; i<blocks.size();i++)
    {
        cocos2d::CCLog("%d", i);
        b2BodyDef def = blocks[i]->blockbodydef;
        bodyUserData *bud2 = new bodyUserData;
        bud2->bodytype = 3;
        bud2->sprite = blocks[i]->sprite;
        bud2->canDelete = false;

        blockbody = world->CreateBody(&def);
        blockbody->SetUserData(bud2);


        blockbody->CreateFixture(&blocks[i]->blockshapedef);
    }

ブロック コンストラクター:

Block::Block(float x, float y)
{
sprite = cocos2d::CCSprite::create("Block.png", cocos2d::CCRect(0,0,50,50));
sprite->setPosition(ccp(x,y));

blockbodydef.type = b2_kinematicBody;
blockbodydef.position.Set(x/PTM_RATIO,y/PTM_RATIO);
//blockbodydef.userData = sprite;



blockPoly.SetAsBox(50/PTM_RATIO , 50/ PTM_RATIO);

blockshapedef.shape = &blockPoly;
blockshapedef.density = 2.0f;
blockshapedef.friction = 0.0f;
blockshapedef.restitution = 0.0f;
}

キャラクター スプライトは 33x65、ブロック スプライトは 50x50 です。

4

0 に答える 0