昨日も同様のスレッドを立てましたが、詳細が不足しているためか、ほとんど反応がありませんでした。もっと徹底していきます。
そのため、tmx マップが追加されたクラス (JoinedMapsLayer) をクリーンアップし、更新、描画などを実行しました。完全に成功せずに他のクラスに追加しようとしたメソッドがいくつかあります。スプライトを作成して画面に正常に表示するものもありますが、JoinedMapsLayer は、ヘッダー ファイルの元の場所であっても、スプライトを識別できないようです。したがって、 JoinedMapsLayer または他のクラスを使用して削除することはできません。ブレークポイントが追加された後 (どこに追加されても) ブレークポイントを設定しようとしましたが、コンソールに po [spritename] と入力すると、nil が表示されます。
たぶん、これがどのように機能するかを完全に理解していないだけで、間違ったアプローチをとっているに違いありません。誰かがこれを完全に理解するのを手伝ってくれるなら、それは大歓迎です!
私はまだ成功していない良い例に出くわしました。こいつは全く登場しない。
ここで、私が以前持っていたものが完全に機能していたことを紹介できます。
(.h) 私が持っている JoinedMapsLayer のインターフェイス:
CCSprite *selectionScreenOverlaySprite;
CCSpriteBatchNode * selectionScreenOverlaySpriteSheet;
私のプロパティ:
@property(nonatomic, retain) CCSprite *selectionScreenOverlaySprite;
@property(nonatomic, retain) CCSpriteBatchNode *selectionScreenOverlaySpriteSheet;
メソッドを宣言します。
-(void) addSelectionScreenOverlay;
(.m) プロパティを合成します。
@synthesize selectionScreenOverlaySprite, selectionScreenOverlaySpriteSheet;
私の方法:
-(void) addSelectionScreenOverlay {
// overlay
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"selectionScreenOverlay.plist"];
selectionScreenOverlaySpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"selectionScreenOverlay.png"];
NSMutableArray *selectionScreenFrames = [NSMutableArray array];
[selectionScreenFrames addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"selectionScreenOverlay.png"]]];
selectionScreenOverlaySprite = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"selectionScreenOverlay.png"]];
[selectionScreenOverlaySpriteSheet addChild:selectionScreenOverlaySprite];
[self addChild:selectionScreenOverlaySpriteSheet z:13];
selectionScreenOverlaySprite.position = [self convertToNodeSpace:CGPointMake(512, 384)];
selectionScreenOverlaySprite.scale = 260;
selectionScreenOverlaySprite.opacity = 0;
}
それでうまくいきます...
しかし、ヘッダーに SpriteFX.h というクラスをインポートして新しいメソッドを呼び出しても、何も起こりませんか?
次のようにクラス メソッドを呼び出します。
[SpriteFX addSelectionScreenOverlayOnLayer:self
withSprite:selectionScreenOverlaySprite
withSpriteSheet:selectionScreenOverlaySpriteSheet];
そして、次のように SpriteFX.h で宣言されたメソッドがあります。
+(void) addSelectionScreenOverlayOnLayer:(CCLayer*)layer
withSprite:(CCSprite*)sprite
withSpriteSheet:(CCSpriteBatchNode*)spriteSheet;
SpriteFX.m の私のメソッドは次のようになります。
+(void) addSelectionScreenOverlayOnLayer:(CCLayer*)layer
withSprite:(CCSprite*)sprite
withSpriteSheet:(CCSpriteBatchNode*)spriteSheet {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"selectionScreenOverlay.plist"];
spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"selectionScreenOverlay.png"];
NSMutableArray *selectionScreenFrames = [NSMutableArray array];
[selectionScreenFrames addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"selectionScreenOverlay.png"]]];
sprite = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"selectionScreenOverlay.png"]];
[spriteSheet addChild:sprite];
[layer addChild:spriteSheet z:13];
sprite.position = [layer convertToNodeSpace:CGPointMake(512, 384)];
sprite.scale = 260;
sprite.opacity = 0;
}
豆なし
私が自分自身をCCLayerとして渡しているので、正しくアンダーサンドすると、クラスメソッドのレイヤーはJoinedMapsLayerのCCLayerを指すはずです。また、渡されるスプライトとスプライト シートは JoinedMapsLayer を指している必要があるため、すべて同じように機能するはずですが、そうではありません。
JoinedMapsLayer でクラス メソッドを呼び出した後、selectionScreenOverlaySprite で親オブジェクトを確認しました。ゼロです。