0

我需要精灵,本质上是一个原子核(父)和一个电子(子)。我正试图找到一种让电子绕原子核运行的方法。我在这里和那里发现了一些关于移动锚点的帖子,但这显然与精灵的纹理有关,而不是精灵本身。

这是我当前的父精灵的初始化方法:

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 等似乎是一件相对简单的事情,但我想我错过了为了移动孩子的锚点而要搜索的内容。有什么建议/其他帖子吗?

谢谢

4

2 回答 2

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);
}
于 2011-10-27T20:24:43.543 回答
0

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

于 2011-10-27T20:22:26.140 回答