CCScaleTo导致CCSprite移动,除了缩放它

时间:2014-04-14 09:50:10

标签: ios cocos2d-iphone box2d scaling ccsprite

我对Cocos2d很陌生,我正在努力实现向上和向下扩展精灵。 我正在使用CCEaseInOut来执行任务。 我的代码段如下所示:

barrel setAnchorPoint:ccp(0.5,0.5)];
id scaleUpAction =  [CCEaseInOut actionWithAction:[CCScaleTo actionWithDuration:.35 scaleX:1.5 scaleY:1.5] rate:1.0];
id scaleDownAction = [CCEaseInOut actionWithAction:[CCScaleTo actionWithDuration:.35 scaleX:1.0 scaleY:1.0] rate:1.0];
CCSequence *scaleSeq = [CCSequence actions:scaleUpAction, scaleDownAction, nil];
[barrel runAction:scaleSeq];

barrel的类型为CCNode

考虑到中心周围可能会发生缩放,我试图将anchorPoint设置为(0.5,0.5)。但是,这似乎没有帮助。

我见过类似的问题:CCSprite is moved when using CCScaleTo or CCScaleBy。不幸的是,在该链接中没有解决问题的答案。

如果有人能指出我正确的方向,那就太好了。

注意:提及桶对象被用作box2d对象可能会有用。那问题可能来自那里吗? 干杯!

注意:我的代码中已经有以下内容:

NSObject* bodyUserDataA = (__bridge NSObject*)contact->GetFixtureA()->GetBody()->GetUserData(); if ([bodyUserDataA isKindOfClass:[ODPPBarrel class]]) { barrel = (ODPPBarrel *)bodyUserDataA; }

1 个答案:

答案 0 :(得分:0)

除非必须要求,否则请务必不要更改节点的锚点。默认情况下,所有节点的anchorpoint都设置为0.5。

id scaleUpAction =  [CCScaleTo actionWithDuration:.35 scale:1.5];
id scaleDownAction = [CCScaleTo actionWithDuration:.35 scale:1.0];
CCSequence *scaleSeq = [CCSequence actions:scaleUpAction, scaleDownAction, nil];

现在,如果桶是CCSprite类型并在b2Body的userdata字段中使用,那么: 从box2d世界获取身体(例如myBody)。

CCSPrite *tmpSPrite = (CCSPrite *)myBody->getUserData;
if(tmpSprite)
  [tmpSPrite runAction:scaleSeq];