すべて一緒に移動および回転するいくつかの複合スプライトを作成する必要があります。AtlasSpriteManagerの位置と回転を変更できるので、サブクラス化して、次のようなショートカットを作成できるようにしました。
CompoundSprite *cSprite = [CompoundSprite spriteManagerWithFile:@"sprites.png"];
[cSprite makeComplexSprite];
内部的には、このように少し見えます
-(void)makeComplexSprite
{
AtlasSprite *sp1 = [[AtlasSprite spriteWithRect:CGRectMake(0, 0, 64, 64)
spriteManager:self] retain];
AtlasSprite *sp2 = [[AtlasSprite spriteWithRect:CGRectMake(0, 0, 64, 64)
spriteManager:self] retain];
[self addChild:sp1];
[self addChild:sp2];
[sp1 setPosition:CGPointMake(0,0)];
[sp2 setPosition:CGPointMake(64,0)];
}
ただし、アプリケーションを実行すると、次の例外でクラッシュします
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -[AtlasSpriteManager makeComplexSprite]: unrecognized selector sent to
instance 0x107e1c0
また、「MakeComplexSprite」内のすべてのコードを削除して何もしないようにすると、同じ問題が発生します。
AtlasSpriteManagerはサブクラス化されたくないようです。これは本当ですか?もしそうなら、なぜ、そしてどのように私はそれを回避することができますか?
アップデート:
atlasSpriteManagerを含むNSObjectを作成することで、回避策を見つけました。それでうまくいきますが、可能であればAtlasSpriteManagerをサブクラス化したいと思います。あなたが説明するように、私はこのexacltyを実装しているようです。このようなインスタンスを作成しています
CompoundSprite *cSprite = [CompoundSprite spriteManagerWithFile:@"file.png"];
[cSprite makeBox];
これは...今考えてみると、返されるのはcSpriteがまだAtlasSpriteManagerであることを意味します。うーん。どうすれば変更できますか?