LevelHelperからを拡張して、LHSprite
さまざまな要素にさまざまな動作を追加できるようにしようとしています。
さて、これまでのところ良いですが、あなたは何が欲しいですか?
基本的に、動きの異なるキャラクターのセットを想像してみてください。Character
メソッドを拡張LHSprite
および定義するクラスを定義できるようにしたいと思いますmove
。すべてのキャラクターはこのクラスを拡張しCharacter
、独自の動きを定義する必要があります。このようにして、マップに要素を追加し、それらを(移動の観点から)同じように扱うことができます。
わかりました、でも何をしましたか?
これまで、カスタムLHSpritesに関するこのリンクをたどっていますが、問題に直面しています。私の場合との最初の違いは、LevelHelper(少なくとも拡張しようとしている要素)を使用して要素を追加しないことです。ランダムな位置にランダムな数の要素が必要なため、コードに要素を追加します。
Character
そこで、警官(extendsとCharacter
extends )を作成するこの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 *)
これを超える方法がわかりません。