以与CCRepeatForever移动CCSprites类似的方式反复移动box2d主体

时间:2011-09-08 12:39:08

标签: cocos2d-iphone box2d

我的当前项目出了问题。

我想做的是让b2Body反复上下移动。我已经知道如何使用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 ]]];

有人可以帮我用b2Body做同样的事情吗? 提前谢谢!

2 个答案:

答案 0 :(得分:0)

您必须自己实施序列,其中包括:

  • 跟踪当前目标位置
  • 从身体的当前位置,检测是否已达到目标
  • 如果有,则更改目标位置
  • 根据需要施加力,冲动或设定速度以移动身体

你或许可以扩展CCMoveTo来创建自己的类......我会先调查一下。

答案 1 :(得分:0)

我知道了,老兄 在几乎解释中,每个CCsprite移动都取决于b2body移动 - 移动被置于'tick'方法 - 在我的情况下,我反过来这样,我根据CC方法移动b2body在tick方法,所以我给这些代码在tick方法:

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);
        }

    }        
}