我需要精灵,基本上是核(父)和电子(孩子)。我正试图找到一种让电子轨道成为原子核的方法。我已经在移动锚点上发现了一些帖子,但这显然与精灵的纹理有关,而不是精灵本身。
这是我父神精灵的当前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等似乎是一件相对简单的事情,但我想我想要搜索什么来移动孩子的锚点。有任何建议/其他帖子吗?
由于
答案 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/