0

我想要完成的是让我CCSprite在触摸另一个 CCSprite 时跟随它。现在我的意思是,假设有另一个 CCSprite 在屏幕上移动的动画。所以如果这个精灵碰到了我的主精灵,我的主精灵应该和它一起在屏幕上移动。这个另一个精灵将是一个平台,所以从技术上讲,最后我希望精灵在另一个精灵的顶部,但它会沿着平台 CCSprite 的顶部移动,就好像平台承载着主精灵一样。

现在我知道如何进行碰撞检测部分并使另一个精灵动画,但是我如何让我的平台“携带”我的主要 CCSprite 也有点像电梯的工作方式?

4

3 回答 3

1
  • 您可以在不使用动作的情况下移动第一个精灵,通过在 nextFrame:(ccTime) dt 函数中手动更新他的位置,这样做很容易根据您的精灵位置加上偏移量来更新另一个精灵位置以将其定位在顶部。

  • 另一种解决方案可能是从其父级中删除跟随精灵并添加为移动节点的子级,我认为这可以在没有闪烁和性能损失的情况下完成。

编辑: 另一种解决方案(也许是最好的)

一种很好的方法,与 Actions 配合得很好,因此您无需手动安排动作

您可以向移动的精灵添加一个属性(如果您还没有这样做,您需要从 CCSprite 子类化),以保留对跟随者的引用

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

然后在你的游戏初始化中,你可以创建两个精灵,并将它们添加为你的主层的孩子,然后你将你的对象的弱引用添加到跟随者

platform.follower = followerSprite;

而当你需要启用follow platform.followerActive = YES;

此时在移动精灵中,您可以覆盖 setPosition 属性

-(void) setPosition:(CGPoint)position { 

if(self.followerActive) { self.follower.position = ccpAdd(position, offset); } [超级设置位置:位置];}

于 2011-12-20T08:35:42.900 回答
1

我认为您可以在 update: 方法中放置标志来检查条件“何时遵循”,您可以根据第一个 Sprite 的位置重新定位第二个 sprite。

-(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 回答