我正在写一个简单的SpriteKit游戏,但我有一个非常严重的错误。 我创建了一个名为GameNode的SKEmitterNode子类。我需要一些特殊的实例方法。我为这个自定义类(GameNode)设置了一个属性。其内容如下:
@property (nonatomic,assign) nodetype GNodeType;
是的,我正在使用此属性类型的枚举。我的枚举如下:
typedef enum {
nodetypeblue,
nodetypered,
nodetypegreen,
nodetypewhite
}nodetype;
好的,现在我的问题是什么。当我使用以下自定义init方法实例化该类时:
-(id)initWithRandomTypeforSkScene:(SKScene*)Scene{
self=[super init];
if (self) {
nodetype type = arc4random_uniform(4);
self.GNodeType=type;
NSString *bluepath = [[NSBundle mainBundle] pathForResource:@"bluenode" ofType:@"sks"];
NSString *pathtoadd = [NSString string];
switch (type) {
case nodetypeblue:
pathtoadd = bluepath;
break;
//I have some possiblilies here i not list them all, its desnt matter
default:
pathtoadd = bluepath;
break;
}
self = [NSKeyedUnarchiver unarchiveObjectWithFile:pathtoadd];
self.position = CGPointMake(arc4random_uniform(Scene.size.width-40)+20, arc4random_uniform(Scene.size.height-40)+20);
//self.name = @"node";
[self setScale:0.25f];
return self;
}
else{
return nil;
}
}
好了,之后,我尝试创建这个类的az实例:
GameNode * Node = [[GameNode alloc] initWithRandomTypeforSkScene:self];
//Self is a SKScene here
这是我的问题。这是返回一个SKEmitterNode而不是GameNode。我怎么知道这个?因为无论何时我调用Node.GNodeType,xcode都会发送一个Exception,并显示以下错误消息:
- [SKEmitterNode GNodeType]:无法识别的选择器发送到实例0x10a022f80
我设置了很多刹车点并尝试了我可以,但它没有解决任何问题。 哦,在我创建了这个名为" Node"我检查过,在创建之后,tpye就是一个SKEmitterNode而不是GameNode。如果我检查我的类中的类型或GnodeType一切正常。在创建,初始化之后,我在外面遇到了问题。请帮助。
答案 0 :(得分:3)
在LearnCocos2D的帮助下,我成功地解决了这个问题。
所以我为我的类创建了一个包含SKEmitterNode的属性。我将sks添加到了属性中,然后我展示了这个属性,而不是整个类。