0

我有 1 CCScene( PlayScene) 和 2 CCLayer( PlayLayerand HUDLayer) 作为它的孩子。在我的PlayLayer.m情况下,我正在调用我在PlayScene课堂上声明的另一种方法。我调用该方法的方式是通过以下代码(in PlayLayer.m):

[(PlayScene *) self.parent gameStory:@"story2.png"];

该方法声明如下(in PlayScene.h):

-(void)gameStory:(NSString *)imgName;

让我感到困惑的是,我在代码的底部做了同样的事情,而且它有效,方法被调用了。但是当我尝试在 PlayLayer.m 的开头更早地再次调用此方法时,由于self.parent = (null).

任何人都可以帮我点亮一些灯吗?

PS该方法最终会调用另一个方法HUDLayer.m,以防万一这件事让你更清楚。

4

2 回答 2

0

如果你初始化一个子节点,它的 parent 属性在初始化期间将是 nil。

解决方案:将需要访问父级的代码推迟到onEnter,在addChild运行时调用:

-(id) init
{
    self = [super init];
    if (self)
    {
        // does not work, parent is nil:
        [(PlayScene *) self.parent gameStory:@"story2.png"];
    }
    return self;
}

-(void) onEnter
{
    [super onEnter];

    // works, parent is set:
    [(PlayScene *) self.parent gameStory:@"story2.png"];
}
于 2012-09-18T08:40:01.020 回答
0

您还可以使用委托来调用父方法:http: //mobiledevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

http://obj-c.pl/objective-c-podstawy-1-3-klasy-i-delegaty/

于 2012-09-17T14:33:40.213 回答