如何关闭cocos2d-iphone中其他层显示的图层

时间:2013-10-20 15:02:32

标签: cocos2d-iphone cclayer ccscene

我有一个名为alayer的图层,并且有一个名为abutton的按钮,当点击按钮时,另一个名为blayer的图层将显示在alayer中,而不是replaceScene,请看下面的代码,

alayer.m

-(void)abuttonclicked:(id)sender
{
  blayer *blayer = [blayer node];
  blayer.position = ccp(1,1);
  [self addChild:blayer];
}

blayer.m有一个名为bbutton的按钮和名为bstring的字符串值,我想点击b按钮,它会关闭blayer(从alayer中删除blayer),并将字符串值bstring传递给alayer,请看下面的代码,

 -(void)bbuttonclicked:(id)sender
 {
  // how can do here to close its self(remove its self from alayer), and pass the bstring to alayer?
 }

感谢。

PS。我可以使用NSUserDefault传递字符串值,但我认为这是一种不好的方法,是否有另一种传递值的方法?

2 个答案:

答案 0 :(得分:0)

也许传递你可以声明的字符串并在ALayer.h / .m

中实现一个属性
 @property(nonatomic,copy) NSString *stringFromLayerB;

在bButtonClicked时删除bLayer:

 -(void)bbuttonclicked:(id)sender
 {
     ALayer *lay = (ALayer*) self.parent;
     lay.stringFromLayerB = @"Whatever you want to set";
     [self removeFromParentAndCleanup:YES];
 }

还有其他方法可以做到这一点。您可以实现回调机制,使用通知,某种代理协议绑定BLayer和ALayer。一切都取决于你的真实(未说明的)要求。

答案 1 :(得分:0)

考虑到您的情况,我认为最好使用 NSNotificationCenter 。 您可以在点按按钮时发布blayer的通知,并在图层中添加观察者以准确回应。

在alayer的init中添加[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedNotification:) name:@"BlayerNotification" object:nil];,在其dealloc中添加[[NSNotificationCenter defaultCenter] removeObserver:self];

它的选择器如:

- (void)receivedNotification:(NSNotification *)notification {
    NSString *string = (NSString *)notification.object;
    NSLog (@"String received %@", string);
}

现在,您可以在点击hte按钮时发布blayer的通知:

-(void)bbuttonclicked:(id)sender {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BlayerNotification" object:self];
    [self removeFromParentAndCleanup:YES];
}