2013-04-12 59 views
0

我在Mac上玩Cocos2D。來自Cocos2D的調用方法

我正在使用IntefaceBuilder和NSColorWell按鈕。我的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]]; 
} 

回答

0

首先,如果你的應用程序崩潰,你總能看到在控制檯崩潰的原因。始終將此消息添加到「爲什麼會崩潰」問題。實際上,這是一個很好的機會,在閱讀完這條信息之後,你將能夠自己解決你的問題。

我假設你的崩潰消息就像「試圖從appdelegate實例調用未知方法updateBackgroundColor」。在你的AppDelegate類中,self指向AppDelegate實例,而不是指向你的圖層。如果你想從應用程序委託中調用這個方法(這實際上對我來說很奇怪),那麼你必須以某種方式獲得你的動畫層的當前實例。