Мне нужно создать несколько составных спрайтов, которые будут двигаться и вращаться вместе. Поскольку возможно изменить положение и вращение 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 просто не любит быть подклассом. Это тот случай? Если так, то почему и как я мог обойти это?
UPDATE
Я нашел обходной путь, создав NSObject, который содержит atlasSpriteManager. Это делает свое дело, но я все же хотел бы подкласс AtlasSpriteManager, если это возможно. Я, кажется, реализую эту точность, как вы описываете. Я создаю экземпляр, подобный этому
CompoundSprite *cSprite = [CompoundSprite spriteManagerWithFile:@"file.png"];
[cSprite makeBox];
что ... теперь я думаю об этом, означает, что cSprite все еще является AtlasSpriteManager, так как это то, что возвращается. хммм. Как мне это изменить?