大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)
上一篇我们初步看了一下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方法