2012-03-09 1 views
0

これはかなり簡単な質問ですが、私は本当に苦労しています。メソッドに渡さずに特定のCCSpriteをポイントする方法は?

私は変数intを取るメソッドを作った。それを使用して、CCSpriteでアクションを実行する必要があります。

たとえば、私はこれを[_hud hideThisActionLed:2];と呼んで、actionLed2というCCSpriteを非表示にする必要があります。

私はその特定のスプライトにアクセスできない別のクラスから呼び出すので、実際のCCSpriteをメソッドに渡すことはできません。

私はスプライト名を[NSString stringWithFormat:@"actionLed%d", actionLedNumber]で作ることができますが、それを使ってその指定されたCCSpriteを指す方法を思いつくことはできません。

は、ここで私は、HUDクラスのスプライトを宣言した方法は次のとおりです。

actionLed1 = [CCSprite spriteWithFrameName:@"actionLed1.png" setScale:TRUE resetAnchor:TRUE]; 
[actionLed1 setOpacity:0]; 
[self addChild: actionLed1 z:11 tag:1]; 

それすべての4つのLED用×4。

+0

を彼らはCCSpri普通です私が他のクラスで宣言したテス( '_hud hideThisActionLed:2 ';で呼び出すもの)。 HUDの新しいクラスです。情報、健康、ターン数などをすべて表示します。 – Liuhu

+0

スプライトにアクセスする方法はたくさんあります。質問を編集し、これらの宣言と宣言に使用するコードを投稿できますか? – sch

答えて

1

これは、異なるLEDにアクセスする方法に依存します。

彼らはあなたのクラス内のプロパティである場合、あなたはこのようにそれらにアクセスすることができます。

NSString *actionLedName = [NSString stringWithFormat:@"actionLed%d", actionLedNumber]; 
CCSprite *actionLed = [self valueForKey:actionLedName]; 

それらが配列に格納されている場合、あなたはこのようにそれらにアクセスすることができます。

CCSprite *actionLed = [self.actionLeds objectAtIndex:actionLedNumber]; 

それを追加するときに、各actionLedのタグを設定している場合は、このようにそれらにアクセスすることができます。

CCSprite *actionLed = [self getChildByTag:actionLedNumber]; 
+0

最初の方法が有効です。ありがとうございました! 2つ目は、「CCNode *」型の式で「CCSprite *」を初期化する互換性のないポインタ型です。 – Liuhu

0

レイヤーにCCSpriteオブジェクトを追加するときは、withTagオプションを使用します。次に、スプ​​ライトをhideThisActionLedメソッドに渡す数値であるタグ番号で参照できます。

[_hud addChild:ledSprite withTag:1]; [_hud addChild:ledSprite2 withTag:2]; 等...

-(void)hideThisActionLed:(int)ledNum { 
CCSprite *theSprite = [_hud getChildByTag:ledNum]; 
... hide the sprite ... 
関連する問題