2013-01-12 43 views
0

所以我編程的Xcode 3.2.4與cocos2d的遊戲,我做了一個名爲球員類。到目前爲止,它只有一個功能是什麼都不做。應用程序崩潰,每當空方法調用

#import <Foundation/Foundation.h> 
#import "cocos2d.h" 

@interface Player : CCSprite { 

} 

-(void)leftButtonPressed; 

@end 



#import "Player.h" 


@implementation Player 

- (id)init{ 
    if((self=[super init])){ 
     self = [CCSprite spriteWithFile:@"playerPlane.png"]; 
     } 
    return self; 
} 

-(void)leftButtonPressed{ 
} 

@end ` 

每當我試圖從任何地方在控制檯

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CCSprite leftButtonPressed]: unrecognized selector sent to instance 0x6e4bb50'

我初始化播放器作爲另一個類的實例做 Player * thePlayer = [[Player alloc]init];

調用leftButtonPressed,整個應用程序崩潰與此

請幫忙!謝謝!!

+0

「是在Xcode 3.2.4編程遊戲」 ...的是,三年前是什麼時候?只是開玩笑,但認真,即使你仍然在雪豹,你應該升級到至少4.2。 – LearnCocos2D

回答

3

這導致問題:

- (id)init{ 
    if((self=[super init])){ 
     self = [CCSprite spriteWithFile:@"playerPlane.png"]; 
     } 
    return self; 
} 

你在做什麼?您初始化新創建的(創建它的調用者alloc/initPlayer對象。方法可能甚至會返回另一個實例,而不是正在執行的實例(一些奇怪的獨特可可事物)。如果成功,則創建一個新的CCSprite對象並將其分配給selfSelf然後返回給調用者。 (如果你不會ARC - 我假設你這樣做 - 那麼這肯定會造成內存泄漏);

但主叫方希望應對Player對象,後來發leftButtonPressed消息,它使CCSprite無法響應。

也就是說,錯誤信息告訴你什麼。

您可以改爲使用:

- (id)initSpriteWithFile(NSString*)fileName{ 
    if((self=[super initSpriteWithFile:fileName])){ 
     // Do any additional setup here. If you don't have any setup then do not overwrit the init method at all. 
     } 
    return self; 
} 

或類似的東西:

- (id)init{ 
    if((self=[super init])){ 
     [self setFileName:@"playerPlane.png"]; //This method may not exist at all but you may find an appropriate one in the docs. I am not used to CCSprit. I am just trying to explain the concept by example. 
     } 
    return self; 
} 
+0

非常感謝老兄! –

0

您正在調用self = [CCSprite spriteWithFile:@"playerPlane.png"];,但這會創建一個CCSprite實例,而不是一個Player實例。

我猜你沒有CCSprite的來源或不存在非原廠基於初始化?

在這種情況下,您最好創建一個類擴展而不是子類。

相關問題