上面3张图是完成后的效果图
游戏已完成,除了英雄外,基本还原了90%的游戏内容,一共13关,20种防御塔,30+种敌人,如上图,以假乱真吧
下面从地图模块起介绍我的方法,如有更好的方法,请留言一起讨论,游戏资源下载原版游戏数据包,解压即可
推荐一款软件,TextureUnpackerRelease1.04可以分割plist形式的图片,提高效率
经过一个月学习也发现之前有很多化简为繁的错误
----------------------------------------------------------------------------------------------------------------------------------------------------
地图模块我采用3层结构,从下到上分别为地图层,触摸层,按键层
地图层负责地图的绘制,添加防御塔、敌人等,触摸层负责拦截一些触摸事件,添加技能/商店技能触摸响应,同时兼顾防御塔升级菜单弹出层,按键层则负责技能和商店按键、玩家生命金钱状态,暂停按键,暂停菜单等。
-----------------------------------------------------------------------------------------------------------------------------------------------------
首先是地图层,新建一个基类BaseMap,基层与Layer
class BaseMap : public Layer
{
public:
CREATE_FUNC(BaseMap);
//当前关卡
CC_SYNTHESIZE(int, level, Level);
//绑定按键层
void bindPlayerStateMenu(PlayerStateMenu* playerState);
Sprite* mapSprite;
//触摸层
TouchLayer* mTouchLayer;
protected:
//存储每一波敌人信息容器
std::vector<std::vector<Vector<GroupMonster*>>> waveVector;
//存储敌人路线
std::vector<std::vector<std::vector<Point>>> path;
//下一波敌人提示(玩过游戏的人知道就是那个一闪一闪的骷髅头)
Vector<WaveFlag*> waveFlags;
void addWaveProgressBars(std::vector<Point> waveFlagLocations);
void showWaveProgressBars(float dt);
virtual void addWaves(float dt);
//添加怪物
virtual void addMonsters(float dt);
//初始化地图
void initMap();
//添加不同地图装饰物
virtual void addOrnament(){};
//添加建塔点
virtual void addTerrains(){};
//退出
virtual void onExitTransitionDidStart();
virtual void onExit(){};
//其他
};
下面是我采用的plist格式,用文件的形式来保存每一关的信息
<dict>
<key>data</key>
<array>
<dict>
<key>gold</key>
<string>500</string>
<key>life</key>
<string>20</string>
<key>wave</key>
<string>3</string>
</dict>