我尝试创建新图层时遇到此异常。所以,基本上我有一个标准的cocos2d模板,我刚刚删除了HelloWorldLayer类并创建了一个名为GameScene的新类,我定义了+scene
方法,init
和dealloc
方法
GameScene.h
#import "cocos2d.h"
@interface GameScene : CCLayer {}
+(id) scene;
@end
GameScene.m
#import "GameScene.h"
@implementation GameScene
+(id) scene {
CCScene *scene = [CCScene node];
GameScene *layer = [GameScene node];
[scene addChild:layer];
return self;
}
-(id) init {
if ((self = [super init])) {
CCLOG(@"New GameScene");
}
return self;
}
-(void) dealloc {
[super dealloc];
}
@end
我的appDelegate,而不是旧图层,从GameScene创建新的
- (void) applicationDidFinishLaunching:(UIApplication*)application
{
…
// Run the intro Scene
[[CCDirector sharedDirector] runWithScene: [GameScene scene]];
}
控制台输出显示:
2012-02-06 20:37:04.284 Doodle[3908:10a03] +[GameScene onEnter]: unrecognized selector sent to class 0x1098c4
2012-02-06 20:37:04.288 Doodle[3908:10a03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[GameScene onEnter]: unrecognized selector sent to class 0x1098c4'
答案 0 :(得分:2)
我明白了。它不是返回方法+scene
的ID类型,而应该是CCScene
值。
// in header also modify type of returned value
+(CCScene *) scene {
CCScene *scene = [CCScene node];
GameScene *layer = [GameScene node];
[scene addChild:layer];
return self;
}
我仍然对id
无效的原因感到困惑,因为它可以是所有类型,甚至是CCScene类型。
答案 1 :(得分:0)
我不确定你要在这里完成什么,但是在你的+(id)场景创作者中,你不应该回归自我。
尝试[场景自动释放]; (如果那就是你真正想要的)。