0

我正在尝试LHSprite从 LevelHelper 扩展 a ,以便可以为不同的元素添加不同的行为。

好的,到目前为止一切都很好,但是你想要什么?

基本上想象一组具有不同动作的角色。我希望能够定义一个Character扩展LHSprite和定义move方法的类。所有角色都应该扩展这个Character类并定义自己的动作。通过这种方式,我可以将元素添加到地图中,并且可以以相同的方式处理它们(在移动方面)。

好的,我明白了,但是你做了什么?

到目前为止,我已经关注了这个关于自定义 LHSprites 的链接,但我遇到了一个问题:我的案例与那个案例的第一个区别是我不使用 LevelHelper 添加我的元素(至少是我试图扩展的那些)。我在代码中添加了我的元素,因为我希望这些元素的随机数量位于随机位置。

所以我制作了这个创建 cop 的 init 方法(即 extendsCharacterCharacterextends LHSprite)。这个方法实际上看起来更像是“添加到加载器”方法,但无论如何:

- (id) initInLoader:(LevelHelperLoader *) loader andNumber: (int) i 
                                                     atPos: (CGPoint) pos{
    self = (Cop *) [ loader createBatchSpriteWithName:@"cop_01" 
                            fromSheet:@"copSheet" fromSHFile:@"enemies" ];

    _uniqueName = [ NSString stringWithFormat:@"Cop_%d", i + 1 ];
    [ self setUniqueName: _uniqueName];

    [ self prepareAnimationNamed:@"cop" fromSHScene:@"enemies" ];
    [ self setAnimationDelayPerUnit: 1.0f/70.0f ];

    self.position = pos;

    [ self playAnimation ];
}

到目前为止,一切都很好。我可以看到我的警察站着并且生气勃勃。但是,当我尝试调用 move 方法(或任何其他方法)时,它会给我一个无法识别的选择器崩溃。

我相信这个错误是由于演员阵容而发生的,(Cop *)但我不知道如何超越这一点。

4

1 回答 1

0

我发现我需要给关卡助手添加一个标签。但是,这个标签没有在源文件中更新,所以我不得不在 LevelHelperLoader.h 中手动添加它enum LevelHelper_TAG

然后我必须在初始化 LevelHelper 时注册该标签

 [[LHCustomSpriteMgr sharedInstance] registerCustomSpriteClass:[Cop class] 
                                                        forTag:COP_TAG];

当我从加载器中获取该元素时,我必须传递该标签:

self = (GlowWorm *) [ loader createBatchSpriteWithName:@"cop_01" 
                                             fromSheet:@"copSheet" 
                                            fromSHFile:@"enemies" 
                                                   tag: COP_TAG];

编辑

回答对问题提出新答案的用户

在初始化 LevelHelper 之前,不要忘记告诉 LevelHelper 的新类。你可以用这条线做到这一点:

[[LHCustomSpriteMgr sharedInstance] registerCustomSpriteClass:[Cop class] 
                                                       forTag: COP_TAG ];
于 2012-10-27T11:06:35.420 回答