为什么我的精灵没有初始化图像?

时间:2013-11-06 22:55:57

标签: objective-c xcode ios7 sprite-kit skspritenode

我正在玩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];

我做错了什么?

2 个答案:

答案 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:呢?

希望这有帮助!