从Cocos2D调用方法

时间:2013-04-12 00:04:55

标签: objective-c cocos2d-iphone

我在Mac上玩Cocos2D。

我正在使用带有NSColorWell按钮的IntefaceBuilder。我的AppDelegate具有IBAction,用于在名为Settings的Singleton中设置背景颜色。然后我希望它调用AnimationLayer的方法updateBackgroundColor来更新它。但它失败并崩溃。

为什么我不能告诉我AnimationLayer方法?

由于AppDelegate已经知道关于AnimationLayer这不是调用方法的正确方法吗? [(AnimationLayer*) self methodNameHere];

AppDeletgate.m

- (IBAction)colorwellBackground:(id)sender {
    [mySettings setBackgroundColor:[sender color]];
    [(AnimationLayer*) self updateBackgroundColor];
}

AnimationLayer.m

// Import the interfaces
#import "AnimationLayer.h"

// HelloWorldLayer implementation
@implementation AnimationLayer

+(CCScene *) scene {

    CCScene *scene = [CCScene node];
    AnimationLayer *layer = [AnimationLayer node];
    [scene addChild: layer];
    return scene;
}

// on "init" you need to initialize your instance
-(id) init {

    if( (self=[super init]) ) {

        mySettings = [Settings sharedSettings]; 

        //DEFAULT BACKGROUND COLOR
        _backgroundColorLayer = [mySettings returnBackgroundColor];
        [self addChild:_backgroundColorLayer];


    }
    return self;
}
- (void) updateBackgroundColor{
    NSLog(@"UPDATE BACKGROUND COLOR %@", [mySettings returnBackgroundColor]);
    [_backgroundColorLayer setColor:[mySettings returnBackgroundColor]];
}

1 个答案:

答案 0 :(得分:0)

首先,如果您的应用程序崩溃,您始终可以在控制台中看到崩溃原因。始终将此消息添加到“为什么崩溃”问题。实际上,很有可能在阅读此消息后,您将能够自己解决问题。

我假设您的崩溃消息类似于“尝试从appdelegate实例调用未知方法updateBackgroundColor”。在您的AppDelegate类中,self指向AppDelegate实例,而不指向您的图层。如果你想从你的应用程序委托中调用这个方法(这对我来说实际上很奇怪),那么你必须以某种方式获取动画层的当前实例。