2011-01-29 8 views
1

私はiPhone用のゲームを作成しています。私はゲーム開発には新しく、私は画面の上部から下部に落ちるボールを持っています。プレーヤーはそれらを試して捕まえることになっています。問題は、新しいスプライトに「addnewBallSprite」メソッドを追加し、後でUpdateEveryFrameメソッドの位置に作用させることです。しかし、新しいボールが作成されたときに画面上にボールがまだ残っていれば、古いボールは動かなくなります。ボールのスプライトのすべてのインスタンスを制御する位置コマンドコントロールの変更を行う方法はありますか?詳しく説明してください。以下は私のaddNewBall方法である:新しいスプライトメソッドを追加したときのすべてのスプライトに作用するcocos2d xcode

-(void) addNewBall { 

int RandomXPosition = (arc4random() % 240) + 40; 
int RandomBallSprite = (arc4random() % 5); 
NSString *BallFileString = @"OrangeBall.png"; 

switch (arc4random() % 5) { 
    case 1: 
     BallFileString = @"OrangeBall.png"; 
     break; 
     case 2: 
      BallFileString = @"GreenBall.png"; 
      break; 
     case 3: 
      BallFileString = @"YellowBall.png"; 
      break; 
     case 4: 
      BallFileString = @"PinkBall.png"; 
      break; 
     case 0: 
      BallFileString = @"BlueBall.png"; 
      break; 
} 


Ball = [CCSprite spriteWithFile:BallFileString]; 
Ball.position = ccp(RandomXPosition, 520); 
[self addChild:Ball z:1]; 
} 

答えて

1

あなたがスプライト上で(あなたがしたい場合、私はCCActionまたは他の何かを意味)いくつかのアクションを実行したい場合は、このスプライトへのポインタを持っている必要があります。だから、NSMutableArrayを作成してそれらのポインタを保持し、それらのポインタと対話することができます。あなたの唯一の子供CCLayerがボールの場合、CCLayerのchildrenメソッドを呼び出すことでそこにポインタを置くことができます。

EDIT

あなたは多くのボールを持っている場合は、それらと対話するための唯一の方法は自分のポインタを維持することです。あなたのクラスにこの宣言を追加します。あなたのクラスのinitメソッドで

NSMutableArray *ballArray_;

初期化配列:

ballArray_ = [[NSMutableArray alloc] init];

新しいボールを作成すると、アレイにボールを追加します。

[ballArray addObject:myNewBall];

これで更新方法では、シーン内の各ボールへのアクセス:

for (Ball *ball in ballArray) 
{ 
    //increase the position of the ball 
} 

ボールはユーザーによってcatchedやシーンのうち、配列から削除されます。

[ballArray removeObject: someBall]; 
+0

たぶん私は間違っapprochをとっている、私のUpdateFrame方法だけyの位置ベクトルをインクリメントします。 Ball.position = ccp(Ball.position.x、Ball.postion.y + 100 * dt); スプライトを移動するためにcocos2dアクションを使用する必要がありますか?あなたはポインタによって "ball.position"を意味しますか? –

+0

ポインタはボールを意味します。あなたのアプローチは全く悪くありません。状況によって異なります。ボールの位置を変更しているときにボールを使用しています。だから、いくつかのボールの位置を変更したい場合は、ポインタも持っているはずです。 – Andrew

+0

それで、私のAddNewBallメソッドはすべてのボール "Ball"を呼び出すので、それを見ています。それを変更する方法はありますか?あなたのすべての協力に感謝します。 –

関連する問題