我正在编写一个简单的SpriteKit游戏,但是我遇到了一个非常严重的错误。
我创建了SKEmitterNode的子类,命名为GameNode。我需要一些特殊的实例方法。我为此自定义类(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;
}
}
OK,之后,我尝试创建此类的z实例,如下所示:
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,则一切正常。创建,初始化后,我刚好在外面遇到问题。请帮助。
最佳答案
在LearnCocos2D的帮助下,我成功地解决了该问题。
因此,我为我的类创建了一个属性,其中包含一个SKEmitterNode。我将sks添加到属性中,并提出了此Property而不是整个类。
关于ios - SKEmitterNode的自定义类子类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22822121/