0

私が達成したいのはCCSprite、それが触れているときに別の CCSprite に従うようにすることです。フォローとは、別の CCSprite が画面を上に移動するアニメーションがあるとしましょう。したがって、このスプライトがメイン スプライトにヒットすると、メイン スプライトも一緒に画面を上に移動する必要があります。この他のスプライトはプラットフォームになるので、技術的には、スプライトを他のスプライトの上に置きたいと思いますが、プラットフォームがメインのスプライトを運んでいるかのように、プラットフォーム CCSprite の上に沿って移動します。

これで、衝突検出部分を実行し、他のスプライトをアニメーション化する方法がわかりましたが、どうすればプラットフォームにメインの CCSprite を「運ぶ」ようにでき、エレベーターの仕組みのようになりますか?

4

3 に答える 3

1
  • nextFrame:(ccTime)dtのような関数で手動で位置を更新することにより、アクションを使用せずに最初のスプライトを移動できます。そうすることで、スプライトの位置とその上に配置するためのオフセットに基づいて、別のスプライトの位置を簡単に更新できます。

  • 別の解決策は、フォロワースプライトをその親から削除し、移動ノードの子として追加することです。これは、ちらつきやパフォーマンスの低下なしに実行できると思います。

編集: 別の解決策(おそらく最良の解決策)

アクションでうまく機能する優れたアプローチなので、手動で移動をスケジュールする必要はありません

移動するスプライトにプロパティを追加して(まだ行っていない場合は、CCSpriteからサブクラス化する必要があります)、フォロワーへの参照を保持できます。

@property (readwrite, nonatomic, assign) CCSprite *follower;
@property (readwrite, nonatomic) BOOL followerActive;

次に、ゲームの初期化で、両方のスプライトを作成し、それらをメインレイヤーの子として追加してから、オブジェクトからフォロワーに弱参照を追加します。

platform.follower = followerSprite;

そして、フォロープラットフォームを有効にする必要がある場合。followerActive= YES;

移動するスプライトのこの時点で、setPositionプロパティをオーバーライドできます

-(void) setPosition:(CGPoint)position { 

if(self.followerActive){self.follower.position = ccpAdd(position、offset); } [super setPosition:position]; }

于 2011-12-20T08:35:42.900 に答える
1

最初のスプライトの位置に応じて 2 番目のスプライトを再配置できる update: メソッドで、「いつフォローするか」という条件を確認するフラグを配置できると思います。

-(void)update:(CCTime)delta
{   
   if(condition == YES)
   {
      secondSprite.position = ccp ( firstSprite.position.x + xOffSet , firstSprite.position.y + yOffSet);
   }
}

コードに従ってこれを試してください..基本的なロジックはこちら..

于 2011-12-20T09:44:52.143 に答える
1

CCFollowアクションを使用して、任意のノードを他のノードに追従させることができます。

于 2011-12-20T11:49:44.147 に答える