开发者

Repeatedly move a box2d body in a similar way to moving CCSprites with CCRepeatForever

I've got a problem with my current project.

What I'd like to do is make a b2Body move up and down repeatedly. I already know how to do this with a CCSprite:

[paddle runAction:[CCRepeatForever actionWithAction: [CCSequence actions: [CCMoveTo actionWithDuration:1.0 position:ccp([paddle position].x,[paddle position].y+40)], [CCMoveTo actionWithDuration:1.0 position:ccp([paddle position].x,[paddle position].y)], nil ]]];

开发者_运维知识库

Can anybody help me do the same thing with a b2Body? Thanks in advance!


You will have to implement the sequence yourself, which involves:

  • keeping track of the current target position
  • from the current position of the body, detect whether it has reached the target
  • if it has, change the target position
  • apply force, impulse or set velocity as necessary to move the body

You might be able to extend CCMoveTo to make your own class to do this... I would look into that first.


i've got it dude,
in almost explanation, every CCsprite move depend on b2body movement -that movement is placed at 'tick' method-.
in my case, i reverse that way, i move b2body according to CCsprite movement on tick method, so i give these code on tick method:

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {    
    if (b->GetUserData() != NULL) {
        CCSprite *sprite = (CCSprite *)b->GetUserData();
        if (sprite.tag == 4 || sprite.tag == 5) {
            b2Vec2 b2Position = b2Vec2(sprite.position.x/PTM_RATIO,
                                       sprite.position.y/PTM_RATIO);
            float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(sprite.rotation);

            b->SetTransform(b2Position, b2Angle);
        }

    }        
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜