2011-08-15 14 views
1

今私はコードをコードする方法をアドバイスが必要です。ランダムスプライトの位置

私は2x2配列で4つのスプライトを持っています。すべてのスプライトは異なります。 レイヤーをロードするときにランダムな位置をミックスする方法はありますか?

これまでのところ、このコードを実行しました。より簡単な方法があるか、またはこのメソッドが正しいですか?私は5X5の配列でもっと多くのスプライトをロードする予定です。

CGPoint grid1 =ccp(60,210); 
CGPoint grid2 =ccp(60,280); 
CGPoint grid3 =ccp(180,210); 
CGPoint grid4 =ccp(180,280); 

sprite1 =[CCSprite spriteWithFile:@"sprite1"]; 
sprite2 =[CCSprite spriteWithFile:@"sprite2"]; 
sprite3 =[CCSprite spriteWithFile:@"sprite3"]; 
sprite4 =[CCSprite spriteWithFile:@"sprite4"]; 

int randomLocation = (arc4random() % 4) + 1; 

switch(randomLocation) 
{ 
case 1: 

sprite1.position=grid1; 
sprite1.position=grid2; 
sprite1.position=grid3; 
sprite1.position=grid4; 

break; 

case 2: 

sprite1.position=grid2; 
sprite1.position=grid3; 
sprite1.position=grid1; 
sprite1.position=grid4; 

break; 

case 3: 
sprite1.position=grid4; 
sprite1.position=grid1; 
sprite1.position=grid2; 
sprite1.position=grid3; 

break; 

case 4: 
sprite1.position=grid4; 
sprite1.position=grid3; 
sprite1.position=grid2; 
sprite1.position=grid1; 

break; 
} 

[self addChild:sprite1]; 
[self addChild:sprite2]; 
[self addChild:sprite3]; 
[self addChild:sprite4]; 
+0

すべての場合、スプライト1が必要だと思います。スプライト1、2、3、4になります。ちょうど1ではありません。 – msgambel

答えて

1

いくつかの定数といくつかのマクロを定義します。

#define GRID_SIZE 36.0f 
#define GRID_MAX_COLUMNS 4 
#define GRID_MAX_ROWS 4 

#define RAND_COLUMN() (arc4random()%GRID_MAX_COLUMNS) 
#define RAND_ROW() (arc4random()%GRID_MAX_ROWS) 

サブクラスCCSprite:ゲームのコードで今すぐ

@interface GridSprite : CCSprite { 
    int column_; 
    int row_; 
} 

@property (nonatomic, assign) int column; 
@property (nonatomic, assign) int row; 
@property (nonatomic, key) NSString* key; 

- (void) reposition; 

@end 

@implementation GridSprite 

@synthesize column=column_, row=row_; 

- (void) reposition { 
    CGPoint position = ccp(column_ * GRID_SIZE, row_ * GRID_SIZE); 
    self.position = position; 
} 

- (NSString*) key { 
    return [NSString stringWithFormat:@"%dx%d", column_, row_]; 
} 

@end 

:ランダムに播種作成します

- (void) setupBoard { 
    NSMutableArray* pieces = [NSMutableArray alloc] init]; 
    NSMutableDictionary* piecesByKey = [NSMutableDictionary alloc] init]; 

    GridSprite* piece; 

    uint i, ic = GRID_MAX_COLUMNS * GRID_MAX_ROWS; 
    for (i=0; i<ic; i++) { 
     piece = [GridSprite node]; 
     piece.anchorPosition = CGPointZero; 

     while (1) { 
      piece.column = RAND_COLUMN(); 
      piece.row = RAND_ROW(); 
      if ([piecesByKey objectForKey:piece.key] == nil) break; 
     } 

     [piece reposition]; 

     [pieces addObject:piece]; 
     [pieces setObject:piece forKey:piece.key]; 
    } 
} 

任意のグリッドのボードze。もちろん、pieceとpiecesByKeyをクラス変数として保持したいと思うでしょう。

+0

すごいです。私はまだcocos2dのプロセスを学んでいます。助けてくれてありがとう。病気はこのコードを理解して実装しようとします。 – phantomsri

+0

必要なときにここに来ます。 –