我想要完成的是使我的CCSprite
跟随另一个CCSprite时,它是触摸它。我所说的跟随是指,假设有另一个CCSprite在屏幕上移动的动画。所以如果这个精灵碰到我的主精灵,我的主精灵就应该跟着它向上移动屏幕。这另一个精灵将是一个平台,所以从技术上讲,我最终希望这个精灵位于另一个精灵的顶部,但它将沿着平台CCSprite的顶部移动,就好像平台承载着主精灵。
我认为你可以在update:方法中放置标志来检查"何时跟随"的条件,你可以根据第一个精灵的位置重新定位第二个精灵。
-(void)update:(CCTime)delta
{
if(condition == YES)
{
secondSprite.position = ccp ( firstSprite.position.x + xOffSet , firstSprite.position.y + yOffSet);
}
}
根据你的代码试试这个。
您可以使用CCFollow动作让任何节点跟随任何其他节点。
-
你可以在不使用动作的情况下移动第一个精灵,通过在nextFrame:(ccTime) dt函数中手动更新他的位置,这样做将很容易根据你的精灵位置加上偏移量来更新另一个精灵位置。
-
另一个解决方案是将跟随者精灵从其父节点中移除,并将其添加为移动节点的子节点,我认为这可以在没有闪烁和性能损失的情况下完成。
编辑:另一个解决方案(可能是最好的)
是一个很好的方法,它与动作一起工作得很好,所以你不需要手动安排动作
你可以给移动的精灵添加一个属性(你需要从CCSprite子类,如果你还没有这样做的话),以保持对跟随者的引用
@property (readwrite, nonatomic, assign) CCSprite *follower;
@property (readwrite, nonatomic) BOOL followerActive;
然后在你的游戏初始化中,你可以创建这两个精灵,并将它们添加为主图层的子图层,然后将对象的弱引用添加到follower
platform.follower = followerSprite;
以及当您需要启用后续平台时。
在移动精灵中,你可以重写setPosition属性
-(void) setPosition:(CGPoint)position {
如果(self.followerActive) {self.follower.position = ccpAdd(position, offset);}(超级setPosition:位置);}