1

私は 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];

私は何を間違っていますか?

4

2 に答える 2

1

問題は簡単だと思います。

あなたはこれを書きました。

- (void) setSize:(FishSize)s;

オーバーライドします- (void)setSize:(CGSize)size。したがって、サイズは初期化されません。
(Objective-C はメソッドのオーバーロードをサポートしていません。)

setFishSize:代わりに使ってみてはどうですか?

お役に立てれば!

于 2013-11-07T12:45:25.307 に答える