我需要创建一些将一起移动和旋转的复合精灵。由于可以更改 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 子类化。正如你所描述的那样,我似乎正在实施这个精确度。我正在创建一个这样的实例
CompoundSprite *cSprite = [CompoundSprite spriteManagerWithFile:@"file.png"];
[cSprite makeBox];
哪个...现在我想起来了,这意味着 cSprite 仍然是 AtlasSpriteManager ,因为这就是返回的内容。嗯。何我改变它?