【问题标题】:Cocos2d - Orbiting/spinning one sprite around anotherCocos2d - 一个精灵围绕另一个精灵旋转/旋转
【发布时间】:2011-10-27 19:47:17
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: cocos2d-iphone ccsprite


    【解决方案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);
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这是正确的,但我不能推荐这种方法,因为它会从节点的位置偏移纹理。通过简单地利用节点层次结构,您可以通过更多控制实现完全相同的效果。如果节点 B 是另一个节点 A 的子节点,并且节点 B 与节点 A 有偏移,则您可以移动、旋转或缩放节点 A,并且节点 B 将相应地遵循这一点,包括围绕节点 A 旋转。
      • 我在这里更详细地解释了为什么更改锚点是不好的做法:stackoverflow.com/questions/7808981/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多