0

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

これは、親スプライトの現在の 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などを使えば比較的簡単にできるように思えますが、子のアンカーポイントを動かすために何を探せばいいのか抜けていると思います。提案/他の投稿はありますか?

ありがとう

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 に答える