Cocos2d - あるスプライトを別のスプライトの周りを周回/回転させる

私はスプライト、本質的には核(親)と電子(子供)に持っています。私は電子軌道を核にする方法を見つけようとしています。私はアンカーポイントを動かすことでこことそこにいくつかの投稿を見つけましたが、それは明らかにスプライト自体ではなくスプライトのテクスチャに関連しています。

これは親スプライトの私の現在の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

2 答え

[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
追加された

Anchor points. Automatically, objects are placed based on the center of an object right? with anchor points you can move that around, so if you rotate the object it will rotate around the anchorpoint. http://www.qcmat.com/understanding-anchorpoint-in-cocos2d/

0
追加された
それは正しいですが、ノードの位置からテクスチャをオフセットするので、私はそのアプローチを推奨できません。ノード階層を利用するだけで、より多くの制御で正確に同じ効果を達成できます。ノードBが別のノードAの子であり、ノードBがノードAからオフセットされている場合、ノードAを移動、回転、または拡大縮小できます。
追加された 著者 LearnCocos2D,
anchorPointを変更することが悪い習慣である理由を説明しました。 stackoverflow.com/questions/7808981/…
追加された 著者 LearnCocos2D,