昨日同様のスレッドを作成しましたが、詳細が不足しているためほとんど応答がありませんでした。私はもっと徹底的になるつもりです。Cocos2d:クラスまたはインスタンスメソッドを使用して正しく子スプライトを作成できないようです。
私はtmxマップを追加し、更新、描画などを実行するクラス(JoinedMapsLayer)をクリーンアップしています。完全な成功なしに他のクラスに追加しようとしたメソッドがいくつかあります。スプライトを作成して画面に表示する人もいますが、JoinedMapsLayerはヘッダーファイルのどこから来たのか分かりません。そのため、JoinedMapsLayerやその他のクラスを使用して削除することはできません。私はそれが追加された後にブレークポイントを設定しようとしました(どこに追加されても)、コンソールにpo [spritename]と入力すると、それはなくなります。
多分、私はこれが完全にどのように機能するのか分かりませんし、間違ったアプローチをしなければならないかもしれません。もし誰かが私にこのことを一度だけ理解してもらうことができたら、それは大いに感謝されます!
私はもう一度成功しなかった良い例を見つけました。これはまったく表示されません。
ここで私は完全に働いたこと、私が持っていたものをお見せすることができます
を(.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のclassメソッド呼び出しの後、私はselectionScreenOverlaySpriteで親オブジェクトをチェックしました。それはゼロです。
ありがとうございます。 "私の共有メソッドを呼び出す人は誰でもスプライトシートを参照する方法がありません"というのは興味深いことです。それは親の財産を失うのですか?私はARCなしで0.95のCocos2Dの編集版を使用しています。 – VagueExplanation
いいえ、共有メソッドの変数を変更しても、そのメソッドを呼び出した人に自動的に値がコピーされるわけではありません。宣言する必要があるでしょう**メソッドシグネチャの型と* var = blah;それは呼び出し元に値をコピーします。 – russbishop