背景
在上一篇博客中,我们提到CMGameScene,但是CMGameScene只是个框架,实际担任游戏逻辑的是CMGameMap类,这个博文就来了解下CMGameMap
头文件
class CMGameMap : public cocos2d::CCTMXTiledMap ,public CMReceiver
{
protected:
enum
{
enTagMario = 998, //通过这个Tag查找Mario
};
protected:
CCArray *m_pArrayItems; //金币数组
CCArray *m_pArrayMonsters; //怪物数组
CCArray *m_pArrayBlocks; //砖块数组
float m_fMapMove; //地图偏移量
float m_fDropSpeedPlus; //掉落速度
float m_fJumpSpeed; //跳跃速度
bool m_bIsLeftKeyDown; //左键是否按下
bool m_bIsRightKeyDown; //右键是否按下
bool m_bIsJumpKeyDown; //跳跃键是否按下
bool m_bIsHeroDead; //是否死亡
public:
static CMGameMap* CreateGameMap(const char* pFileName);
// 返回地图指定位置上的图块
CCSprite* TileMapLayerPosToTileSprite(CCPoint TileMapLayerPos);
//通过地图块坐标返回地图块类型
enumTileType TileMapPosToTileType(CCPoint HeroPos,float fMapMove);
//地图块坐标转换为地图层坐标
CCPoint TileMapPosToTileMapLayerPos(CCPoint TileMapPos);
//地图层坐标转换为世界坐标
CCPoint TileMapLayerPosToWorldPos(CCPoint TileMapLayerPos,float m_fMapMove);
//地图层坐标转换为地图块坐标
CCPoint TileMapLayerPosToTileMapPos(CCPoint TileMapLayerPos);
//返回地图偏移量
float GetMapMove();
virtual void OnCallPerFrame(float dt);
protected:
virtual bool Init();
void onExit();
//Mario碰撞
void MarioMove(float fT);
//顶砖块
void HitBlock(CCPoint TileMapLayerPos);
//删除砖块
void DeleteBlock();
//消息处理
protected:
virtual void OnMsgReceive( int enMsg,void* pData,int nSize );
void OnSubMsgItemRemove(void *pData ,int nSize); //[道具移除]消息处理
void OnSubMsgMarioLevelUp(); //[马里奥长大]消息处理
void OnSubMsgMonsterDisappear(void *pData,int nSize);//[怪物消失]消息处理
void OnSubMsgStamp(void *pData,int nSize); //[被马里奥踩踏]消息处理
void OnSubMsgBlockBoxHitted(void *pData,int nSize); // [砖块被顶]消息处理
void OnSubMsgMarioBeHurt(); //马里奥被伤害的消息处理
};
从头文件上CMGameMap是从CCTMXTileMap派生,CCTMXTileMap是cocos2dx中的一个瓦片地图类ÿ