Cocos2d - 围绕另一个旋转或旋转一个精灵

时间:2011-10-27 19:47:18

标签: cocos2d-iphone ccsprite

我需要精灵,基本上是核(父)和电子(孩子)。我正试图找到一种让电子轨道成为原子核的方法。我已经在移动锚点上发现了一些帖子,但这显然与精灵的纹理有关,而不是精灵本身。

这是我父神精灵的当前init方法:

self = [super init];
if (self) {

    CCSprite *orbitAnchor = [CCSprite new];
    [self addChild:orbitAnchor];
    orbitAnchor.position = ccp(32,32);

    CCSprite *orbiter = [CCSprite spriteWithFile:@"line.png" rect:CGRectMake(0, 0, 8, 8)];
    [orbitAnchor addChild:orbiter];
    orbiter.position = ccp(40,40);

    CCAction *orbitAction = [CCRepeatForever actionWithAction:[CCRotateTo actionWithDuration:1 angle:720]];
    [orbitAnchor runAction:orbitAction];

    [self initAnimations];
}

return self;

这些数字完全是武断的 - 我只是把它们放在那里并且看起来最好看。我确信有更多编程方式可以做我想做的事。

基本上,我正在寻找一种方法将孩子的轴点设置在父级的中心,然后让它围绕该点旋转。使用CCRotate等似乎是一件相对简单的事情,但我想我想要搜索什么来移动孩子的锚点。有任何建议/其他帖子吗?

由于

2 个答案:

答案 0 :(得分:1)

你有[CCSprite new]这是一个不寻常的用途,可能不受支持。除非轨道锚节点应显示纹理,否则您只需使用CCNode作为锚点。

从技术上讲,你所做的一切都是正确的。您可能希望在没有旋转操作的情况下尝试,而是在计划的更新方法中手动更改方向。

  CCNode *orbitAnchor = [CCNode node];
  [self addChild:orbitAnchor z:0 tag:1];
  orbitAnchor.position = ccp(32,32);

  CCSprite *orbiter = [CCSprite spriteWithFile:@"line.png" rect:CGRectMake(0, 0, 8, 8)];
  [orbitAnchor addChild:orbiter z:0 tag:2];
  orbiter.position = ccp(40,40);

  [self scheduleUpdate];

更新方法:

-(void) update:(ccTime)delta
{
  CCNode* orbitAnchor = [self getChildByTag:1];
  orbitAnchor.direction += 5;
}

从图像文件名中看起来你正试图从orbitAnchor到轨道器绘制一条线。您可以使用ccDrawLine执行此操作:

-(void) draw
{
  CCNode* orbitAnchor = [self getChildByTag:1];
  CCNode* orbiter = [self getChildByTag:2];
  ccDrawLine(orbitAnchor.position, orbiter.position);
}

答案 1 :(得分:0)

锚点。自动地,对象是根据对象的中心放置的吗?使用锚点你可以移动它,所以如果你旋转对象,它将围绕锚点旋转。 http://www.qcmat.com/understanding-anchorpoint-in-cocos2d/