你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> (NO.00005)iOS實現炸彈人游戲(五):游戲數據初始化介紹(二)

(NO.00005)iOS實現炸彈人游戲(五):游戲數據初始化介紹(二)

編輯:IOS開發綜合

 

我們現在來依次看一下上篇中提到的各個方法,首先介紹的是updateStateLabel方法:

#pragma mark MainScene游戲相關輔助方法

//更新主角狀態標簽,格式為:神速 無敵 爆裂 穿牆 穿彈 遙控
-(void)updateStateLabel{
    NSString *state = [NSString stringWithFormat:@"%@%@%@%@%@%@",
                       _isPlayerSpeedUp ? @"神速":@"    ",
                       _player.isInvincible ? @"無敵":@"    ",
                       !_isFearBomb ? @"爆裂":@"    ",
                       _player.canAcrossBrick ? @"穿牆":@"    ",
                       _player.canAcrossBomb ? @"穿彈":@"    ",
                       _isManualExplode ? @"遙控":@"    "];
    [_hudLayer updateStateLabel:state];
}

代碼很好理解,就是根據當前主角的狀態創建狀態字符串然後顯示在標簽中,當然更可取的方法是使用圖標來顯示,這個可以留作以後擴展.

接下來看一下initNoWallTiles方法,該方法的作用是遍歷所有非牆的瓦塊坐標,為後面的方法調用做准備,起到一個緩存數據換速度的目的:

//初始化不是牆的所有瓦塊坐標,還要排除(0,0),(0,1),(1,0)三個瓦塊.
-(void)initNoWallTiles{
    CGPoint badTilePos1 = ccp(0, 0);
    CGPoint badTilePos2 = ccp(0, 1);
    CGPoint badTilePos3 = ccp(1, 0);

    for (int x = 0; x < _tileMap.mapSize.width; x++) {
        for (int y = 0; y < _tileMap.mapSize.height; y++) {
            CGPoint tilePos = ccp(x, y);
            if (CGPointEqualToPoint(tilePos, badTilePos1) ||
                CGPointEqualToPoint(tilePos, badTilePos2) ||
                CGPointEqualToPoint(tilePos, badTilePos3)) {
                continue;
            }else if (![self isWallAtTileCoord:tilePos]) {
                [_notWallTiles addObject:[NSValue valueWithCGPoint:tilePos]];
            }
        }
    }
    NSAssert(_notWallTiles.count == 249, @"_notWallTiles must equ 249");
}

代碼中依次遍歷了所有瓦塊,將非牆瓦塊的坐標加入到_notWallTiles數組中,這樣後面的隨機生成地圖方法裡我們可以很方便的使用這些數據了.注意其中剔除了3個坐標,分別為:

(0,0) , (0,1) 和 (1,0)

因為游戲主角炸彈人需要在(0,0)處產生,所以(0,1)和(1,0)自然不能放置磚塊,否則主角自身就會”死路一條”,最後用一個斷言來檢查非牆瓦塊的個數是否為249,這個是事先手動計算好的,總共為30x10=300個瓦塊,減去6*8=48個不可摧毀牆體,再減去3個上述坐標,最後剩余249個瓦塊可以操作.

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved