我正在玩SpriteKit并且对这可能是一个非常愚蠢的错误感到茫然。 我正在扩展一个SKSpriteNode,Fish,声明如下:
@interface Fish : SKSpriteNode
@property BOOL direction;
@property FishSize fishSize;
+ (id) spriteNodeWithImageNamed : (NSString *) name;
- (id) initWithImageNamed :(NSString *)name;
- (void) setSize:(FishSize)s;
@end
我重写了spriteNodeWithImageNamed类方法:
+ (id) spriteNodeWithImageNamed : (NSString *) name
{
Fish * f = [super spriteNodeWithImageNamed : name];
f.direction = right;
f.fishSize = SmallSize;
return f;
}
这是错误的,因为精灵没有被加载。另一方面,如果我只是在常规SKSpriteNode上调用spriteNodeWithImageNamed方法,它就可以正常工作:
//this gets initialized to the proper size
SKSpriteNode * node = [SKSpriteNode spriteNodeWithImageNamed:picName];
// this is initialized to size (0,0)
Fish * fish = [Fish spriteNodeWithImageNamed:picName];
我做错了什么?
答案 0 :(得分:1)
子类化对我来说非常好:
@interface Fish : SKSpriteNode
+ (id) spriteNodeWithImageNamed : (NSString *) name;
@end
@implementation Fish
+ (id) spriteNodeWithImageNamed : (NSString *) name
{
Fish * f = [super spriteNodeWithImageNamed : name];
return f;
}
@end
像这样使用它:
Fish* f = [Fish spriteNodeWithImageNamed:@"dummy_case.png"];
[self addChild:f];
// prints 16.0, 16.0 in my case:
NSLog(@"%f, %f", f.size.width, f.size.height);
精灵正常显示。
如果您指的是FishSize
,则取决于FishSize
是什么。它是CGSize typedef还是枚举还是完全不同的东西?
答案 1 :(得分:1)
我认为问题很简单。
你写了这个。
- (void) setSize:(FishSize)s;
它会覆盖- (void)setSize:(CGSize)size
。所以尺寸不会被初始化
(Objective-C不支持方法重载。)
如何使用setFishSize:
呢?
希望这有帮助!