上一篇我們初步看了一下MainScene類的初始化方法裡都做了神馬事,其中隨機化地圖是在initGameDataFromGD方法裡做的,我們就來深入看看這個方法.
該方法是一個比較長的方法,裡面又調用了若干其他方法,我把其中主要的代碼在下面列出來:
//用游戲數據初始化當前關卡的數據
-(void)initGameDataFromGD{
[_gd loadGameData];
//省略初始化HUD層的標簽內容的一大堆代碼
_player.canAcrossBrick = _gd.canPlayerAcrossBrick;
_player.canAcrossBomb = _gd.canPlayerAcorssBomb;
_isPlayerSpeedUp = _gd.isPlayerSpeedUp;
if (_isPlayerSpeedUp) {
_player.speedPerStep = 0.4;
}
[self updateStateLabel];
_totalSec = _gd.curLevelLeftTime;
[_hudLayer updateTimeLabel:_totalSec];
[self initNoWallTiles];
//隨機化地圖方法
[self randomCreateMap];
[self initWalkableTiles];
//初始化所有FS類的名稱
[FireSprite initClassNames];
[self spawnFireSprites3];
}
該方法裡面比較”雜”,它主要做了如下這些事:
將iOS設備中存儲的數據讀到內存中,這樣每次玩的記錄和內容都可以保存和再加載,這是在loadGameData方法中完成的,後面會介紹 根據游戲數據設置HUD層中對應的標簽,HUD是我們游戲中的儀表盤:其中包括了剩余的生命數,炸彈數,當前累積的分數,當前炸彈的威力大小,游戲剩余的時間等等標簽.在實際游戲中顯示如下:
最左邊那列豎條實際是顯示在屏幕可見范圍之外,需要的時候在彈進來,這裡先不用管吧.
根據游戲數據設置游戲主角的屬性:是否可以穿牆和穿炸彈,是否處於高速移動狀態 更新HUD中的狀態標簽,調用的是updateStateLabel方法,後面會提及 接下來初始化可布局的所有瓦塊坐標,調用的方法是initNoWallTiles方法 然後調用randomCreateMap來創建隨機地圖,別急馬上就會講到 初始化所有可達的瓦塊,調用的方法為initWalkableTiles方法 初始化FireSprite敵人類中的所有類名稱 根據關卡中的數據”產出”敵人,調用的是spawnFireSprites3方法