gpt4 book ai didi

cocoa - 如何在Cocos2d中继承AtlasSpriteManager?

转载 作者:行者123 更新时间:2023-12-03 17:00:29 25 4
gpt4 key购买 nike

我需要创建一些复合 Sprite ,它们会一起移动和旋转。由于可以更改 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,因为这就是返回的内容。嗯嗯。我该如何改变呢?

最佳答案

在CompoundSprite中实现您自己的spriteManagerWithFile:或compoundSpriteWithFile:,这将返回CompoundSprite的实例。

编辑:

或者,你可以做类似的事情

[[ComplexSprite alloc] makeComplexSprite];

但是您还需要执行“spriteManagerWithFile:”部分。喜欢:

-(id)makeComplexSpriteWithFile:(NSString*)file
{
if (! (self = [super initWithSpriteManager:..capacity:..]))
return nil;

// do your ComplexSprite specific initializing here..

return self;
}

关于cocoa - 如何在Cocos2d中继承AtlasSpriteManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1742302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com