0

我有一个运动学身体类型的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);



    }
   }

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

谢谢大家,

莫尼什

4

1 回答 1

1

总结一下您的代码,您更新精灵的位置以反映身体的位置,启动动画,然后更新身体的位置以对应于精灵的位置。所以很自然,这里什么都不应该移动,因为你的CCMoveTo动作还没有对你的精灵产生任何影响。

其次,您的更新方法可能会被非常频繁地调用,例如每秒数十次,因此动画会不断重置并且不会产生任何可见的进度。

为了遵循一致的模式,您如何设置运动机构的速度。此外,更新精灵的位置以对应于这些身体,就像你对动态身体所做的那样,但不要将你的身体的变换设置为对应于它们的精灵。

于 2013-01-06T08:07:53.823 回答