我想要完成的是让CCSprite
在触摸它时跟随另一个CCSprite。现在我的意思是,让我们说有一个动画,另一个CCSprite向上移动屏幕。因此,如果这个精灵击中我的主精灵,我的主精灵应该用它向上移动屏幕。这个其他精灵将是一个平台,所以从技术上来说,我希望精灵在其他精灵之上,但它会沿着平台CCSprite的顶部移动,好像平台正在携带主精灵
现在我知道如何进行碰撞检测部分并使其他精灵动画,但我怎样才能让我的平台'携带'我的主要CCSprite也有点像电梯的工作原理? / p>
答案 0 :(得分:1)
你可以在不使用动作的情况下移动第一个精灵,通过在nextFrame:(ccTime)dt kinda函数中手动更新他的位置,这样做很容易根据你的精灵位置和偏移更新另一个精灵位置把它放在最上面。
另一个解决方案可能是从其父级删除跟随者精灵并添加为移动节点的子级,我认为这可以在没有闪烁和性能损失的情况下完成。
编辑: 另一种解决方案(可能是最好的解决方案)
一种很好的方法,适用于动作,因此您无需手动安排动作
你可以向移动的精灵添加一个属性(你需要从CCSprite继承,如果你还没有这样做),以保持对跟随者的引用
@property (readwrite, nonatomic, assign) CCSprite *follower;
@property (readwrite, nonatomic) BOOL followerActive;
然后在游戏中,您可以创建两个精灵,并将它们添加为主图层的子项,然后将弱对象从对象添加到跟随者
platform.follower = followerSprite;
当您需要启用以下platform.followerActive = YES;
时此时在移动精灵中,您可以覆盖setPosition属性
-(void) setPosition:(CGPoint)position {
if(self.followerActive){ self.follower.position = ccpAdd(position,offset); } [super setPosition:position]; }
答案 1 :(得分:1)
我认为你可以放置标志来检查更新中的条件“何时跟随”:方法你可以根据第一个Sprite的位置重新定位第二个精灵。
-(void)update:(CCTime)delta
{
if(condition == YES)
{
secondSprite.position = ccp ( firstSprite.position.x + xOffSet , firstSprite.position.y + yOffSet);
}
}
根据你的代码尝试这个。基本逻辑就在这里..
答案 2 :(得分:1)
您可以使用CCFollow操作让任何节点跟随任何其他节点。