2011-04-13 43 views
0

我正在嘗試建造類似於Canabalt的建築物,在建築物(模塊)之間添加洞和不同高度。你可以看到的遊戲是如何看現在的截圖:http://twitpic.com/4kb5jdCocos2D - 在建築物之間添加洞和不同高度

這裏是代碼我目前使用:

-(id) init 
{ 
    // always call "super" init 
    // Apple recommends to re-assign "self" with the "super" return value 
    if((self=[super init])) { 

     moduleSize = 160; 

     screenSize = [[CCDirector sharedDirector] winSize]; 

     CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache]; 
     [frameCache addSpriteFramesWithFile:@"ModulesScene1.plist"]; 

     CCTexture2D* gameArtTexture = [[CCTextureCache sharedTextureCache] addImage:@"ModulesScene1.png"]; 

     // Create the background spritebatch 
     spriteBatch = [CCSpriteBatchNode batchNodeWithTexture:gameArtTexture]; 
     [self addChild:spriteBatch]; 

     numStripes = 1; 

     /* BEGIN MODULES */ 

     NSString* frameName = [NSString stringWithFormat:@"Module0-hd.png"]; 
     CCSprite* sprite = [CCSprite spriteWithSpriteFrameName:frameName]; 
     sprite.anchorPoint = CGPointMake(0, 0.5f); 
     sprite.position = CGPointMake(0, screenSize.height/2); 
     [spriteBatch addChild:sprite z:0 tag:0]; 

     frameName = [NSString stringWithFormat:@"Module0-hd.png"]; 
     sprite = [CCSprite spriteWithSpriteFrameName:frameName]; 
     sprite.anchorPoint = CGPointMake(0, 0.5f); 
     sprite.position = CGPointMake((moduleSize - 1.1f), screenSize.height/2); 
     [spriteBatch addChild:sprite z:1 tag:1]; 

     frameName = [NSString stringWithFormat:@"Module1-hd.png"]; 
     sprite = [CCSprite spriteWithSpriteFrameName:frameName]; 
     sprite.anchorPoint = CGPointMake(0, 0.5f); 
     sprite.position = CGPointMake((moduleSize * 2) - 1.1f, screenSize.height/2); 
     [spriteBatch addChild:sprite z:2 tag:2]; 

     frameName = [NSString stringWithFormat:@"Module2-hd.png"]; 
     sprite = [CCSprite spriteWithSpriteFrameName:frameName]; 
     sprite.anchorPoint = CGPointMake(0, 0.5f); 
     sprite.position = CGPointMake(((moduleSize * 3) - 1.1f), screenSize.height/2); 
     [spriteBatch addChild:sprite z:3 tag:3]; 

     frameName = [NSString stringWithFormat:@"Module0-hd.png"]; 
     sprite = [CCSprite spriteWithSpriteFrameName:frameName]; 
     sprite.anchorPoint = CGPointMake(0, 0.5f); 
     sprite.position = CGPointMake(((moduleSize * 4) - 1.1f), screenSize.height/2); 
     [spriteBatch addChild:sprite z:4 tag:4]; 

     frameName = [NSString stringWithFormat:@"Module1-hd.png"]; 
     sprite = [CCSprite spriteWithSpriteFrameName:frameName]; 
     sprite.anchorPoint = CGPointMake(0, 0.5f); 
     sprite.position = CGPointMake(((moduleSize * 5) - 1.1f), screenSize.height/2); 
     [spriteBatch addChild:sprite z:5 tag:5]; 

     /* END MODULES */ 

     // Get current scrollSpped 
     scrollSpeed = [[GameManager sharedGameManager] scrollSpeed]; 

     speedFactors = [[CCArray alloc] initWithCapacity:numStripes]; 
     [speedFactors addObject:[NSNumber numberWithFloat:2.5f]]; 
     NSAssert([speedFactors count] == numStripes, @"speedFactors count does not match numStripes!"); 

     [self scheduleUpdate]; 

    } 

    return self; 

} 

-(void) update:(ccTime)delta 
{ 

    CCSprite* sprite; 
    scrollSpeed = [[GameManager sharedGameManager] scrollSpeed]; 

    CCARRAY_FOREACH([spriteBatch children], sprite) 
    { 

     NSNumber* factor = [speedFactors objectAtIndex:0]; 

     CGPoint pos = sprite.position; 
     pos.x -= scrollSpeed * [factor floatValue]; 

     if (pos.x < -screenSize.width) 
     { 

      pos.x += ((screenSize.width * 2) - 2); 

      int x = (arc4random() % 3); 

      int xHole = (arc4random() % 10); 

      NSString *randomName = nil; 

      CCSpriteFrame *randomFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:randomName]; 
      [sprite setDisplayFrame:randomFrame]; 

     } 

     sprite.position = pos; 

    } 

} 
+0

你的問題是什麼? – 2011-04-13 17:23:53

+0

現在所有的建築物都處於相同的高度並相互連接。我希望他們隨機稍微更高或更低,並增加他們之間的空間,就好像有一個洞。 – Antoni 2011-04-13 17:48:46

回答

0

的建築物之間添加孔,你可以添加一個簡單的蘭特( )之類的函數,在INIT方法:

...

sprite.position = CGPointMake(((moduleSize * 3) - 1.1f + (rand()%40)), screenSize.height/2); 

...

這會增加一個隨機差距(最大40分)