0

CCMove でボディを移動したい次のコードをスラブのように使用しています。1px から 100px に移動してから 100px から 1px に戻したいのですが、1x から 100px に移動するだけで予期しない動作をする場合は正常に動作します私が戻るとき

void MovableBlock::update(float dt) {

    b2Vec2 position;

    if(isForward) {
        positionAnimationImg =  ccpAdd(positionAnimationImg, animatableImage->getPosition());
        position = point_to_vec(ccp(this->getPositionX()+positionAnimationImg.x,this->getPositionY()));
    }
    else {

        positionAnimationImg =  ccpSub(positionAnimationImg, animatableImage->getPosition());
        position = point_to_vec(ccp(positionAnimationImg.x-this->getPositionX(),this->getPositionY()));
    }
     CCLog("%f:%f",this->getBody()->GetTransform().p.x,position.y);
    //CCLog("position>>  %f:%f",position.x,position.y);

    this->getBody()->SetTransform(b2Vec2(position.x,
                                         position.y),
                                  this->getBody()->GetAngle());
    animatableImage->setPosition(CCPointZero);
}
4

1 に答える 1

1

Box2d ボディで CCMove を使用する場合は、ボディに ccsprite をアタッチし、スプライトに ccmove を適用し、update メソッドでスプライトの位置に従ってボディを変換します。

例: Cocos@dx 内

PTM_RATIO 32;

CCSprite *ball = CCSprite::create("icon.png");
ball->setPosition(ccp(visibleSize.width/5, visibleSize.height/5));
this->addchild(ball);

b2BodyDef bdf ;
bdf.type = b2_dynamicBody;
bdf.position.Set((float)(visibleSize.width/(10*PTM_RATIO)), (float)(visibleSize.height/PTM_RATIO));
b2body hero = _world->CreateBody(&bdf);
hero->SetUserData(ball);

CCMoveBy *action = CCMoveBy::create(.5, CCPointMake(ball->getPositionX(), ball->getPositionY()-10));
CCMoveBy* action_back = (CCMoveBy*)action->reverse();
ball->runAction(CCSequence::create(action, action_back, NULL));

今 Update メソッドで

CCSprite *sp1 = (CCSprite*)hero->GetUserData();
hero->SetTransform(b2Vec2(sp1->getPositionX()/PTM_RATIO, sp1->getPositionY()/PTM_RATIO), 0);
于 2013-11-14T10:17:38.490 に答える