如何在box2d中移动PhysicsSprite

时间:2013-01-06 07:46:01

标签: ios5 box2d-iphone physics-engine

我有一个运动学体型的physicsSprite,我想将身体和精灵位向下移动并回到它的位置。我尝试过这样的内部更新方法:

for (NSValue *bodyValue in [self getGoalPostBodiesList])
                          {
                              b2Body *gPBody = (b2Body *)[bodyValue pointerValue];

                          PhysicsSprite *pSprite =(PhysicsSprite *) gPBody->GetUserData();
                          NSLog(@"\n tag value of Sprite = %d",pSprite.tag);
                          if(pSprite == goal1)
                          {
                              pSprite.position = CGPointMake((gPBody->GetPosition().x)*32.0,(gPBody->GetPosition().y)*32.0);
                              float angle = gPBody->GetAngle();
                              pSprite.rotation = -(CC_RADIANS_TO_DEGREES(angle));

                              id moveDownAction = [CCMoveTo actionWithDuration:0.5 position:CGPointMake(pSprite.position.x,(pSprite.position.y )- 40)];
                              id moveUpAction = [CCMoveTo actionWithDuration:0.5 position:CGPointMake(pSprite.position.x,(pSprite.position.y )+ 40)];
                              CCSequence *seqAction = [CCSequence actions:moveDownAction,moveUpAction, nil];
                              [pSprite runAction:seqAction];                         

                              b2Vec2 pos = b2Vec2(pSprite.position.x/32.0, pSprite.position.y/32.0);
                              gPBody->SetTransform(pos, CC_DEGREES_TO_RADIANS(pSprite.rotation));
                              gPBody->SetLinearVelocity(b2Vec2(0.0f, 0.0f));
                              gPBody->SetAngularVelocity(0.0f);



    }
   }

精灵仍然没有改变它的位置。 任何人的帮助都将深受感激。

全心全意,

MONISH

1 个答案:

答案 0 :(得分:1)

要总结您的代码,您需要更新精灵的位置以反映正文的位置,启动动画,然后更新正文的位置以对应精灵的位置。很自然地,没有什么可以移动到这里,因为你的CCMoveTo动作还没有对你的精灵产生任何影响。

其次,您的更新方法可能会经常调用,例如每秒几十次,因此动画会不断重置,并且不会取得任何明显的进展。

要遵循一致的模式,如何设置运动物体的速度。此外,更新精灵的位置以对应于这些实体,就像动态实体一样,但设置身体的变换以对应于它们的精灵。