我有一个运动学体型的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
答案 0 :(得分:1)
要总结您的代码,您需要更新精灵的位置以反映正文的位置,启动动画,然后更新正文的位置以对应精灵的位置。很自然地,没有什么可以移动到这里,因为你的CCMoveTo
动作还没有对你的精灵产生任何影响。
其次,您的更新方法可能会经常调用,例如每秒几十次,因此动画会不断重置,并且不会取得任何明显的进展。
要遵循一致的模式,如何设置运动物体的速度。此外,更新精灵的位置以对应于这些实体,就像动态实体一样,但不设置身体的变换以对应于它们的精灵。