0

LevelHelperからを拡張して、LHSpriteさまざまな要素にさまざまな動作を追加できるようにしようとしています。

さて、これまでのところ良いですが、あなたは何が欲しいですか?

基本的に、動きの異なるキャラクターのセットを想像してみてください。Characterメソッドを拡張LHSpriteおよび定義するクラスを定義できるようにしたいと思いますmove。すべてのキャラクターはこのクラスを拡張しCharacter、独自の動きを定義する必要があります。このようにして、マップに要素を追加し、それらを(移動の観点から)同じように扱うことができます。

わかりました、でも何をしましたか?

これまで、カスタムLHSpritesに関するこのリンクをたどっていますが、問題に直面しています。私の場合との最初の違いは、LevelHelper(少なくとも拡張しようとしている要素)を使用して要素を追加しないことです。ランダムな位置にランダムな数の要素が必要なため、コードに要素を追加します。

Characterそこで、警官(extendsとCharacterextends )を作成するこのinitメソッドを作成しました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 に答える