cocos植物大战僵尸(三)游戏场景:地图滚动
发布时间:2020-12-14 16:31:22 所属栏目:百科 来源:网络整理
导读:2.3 游戏场景 2.3.1 地图滚动 根据 json 表读取出,当前关卡要载入哪张地图,并读取当前地图的相关。 Json 表为数组结构,配置如下: [{"Level":0,"MapType":0,"SunInit":100,"CardSum":1,"ChooseCardSum":1,"0":{"Name":"Peashooter"}},..........] 其中 Le
2.3游戏场景2.3.1地图滚动根据json表读取出,当前关卡要载入哪张地图,并读取当前地图的相关。Json表为数组结构,配置如下:
[ {"Level":0,"MapType":0,"SunInit":100,"CardSum":1,"ChooseCardSum":1,"0":{"Name":"Peashooter"} },.......... ] 其中Level:当前第几关。MapType:当前关卡的类型,也是选择地图图片的关键,有以下几种类型 enum MapType { GrasslandOfOneLine = 0,//一条线草地 GrasslandOfThreeLine,//三条线草地 GrasslandOfDay,//草地白天 GrasslandOfNight,//草地夜晚 PoolOfDay,//泳池白天 PoolOfNight,//泳池夜晚 }; 程序读取到第几关,然后根据第几关去选择关卡的类型(即地图类型),然后去选择相应的图片作为游戏的背景图。代码如下: void CGameMapLayer::mapLoad() { int iLevel = CGlobalComm::getInstance()->getiGameLevel(); Json::Reader reader; Json::Value root; std::string data = FileUtils::getInstance()->getStringFromFile(PATH_LEVEL_CONFIG); reader.parse(data,root,false);//读json文件 int iMapType = root[iLevel]["MapType"].asInt(); std::string sFirstName = StringUtils::format("PVZBackground_%d.png",iMapType);//名字转化为缓冲池中第一张图片 m_spMap = Sprite::createWithSpriteFrameName(sFirstName); m_spMap->setAnchorPoint(Point(0,0));//设置锚点,把中心坐标系转换成世界坐标 m_spMap->setPosition(Point(m_iMapXpos,0)); this->addChild(m_spMap,LAYER_FIRST); } 这里的m_iMapXpos值是0。Init中先调用mapLoad,再开启使地图滚动的定时器。 void CGameMapLayer::mapRoll(float dt) { if (m_iMapXpos > -380) { m_iMapXpos -= 19; m_spMap->setPosition(Point(m_iMapXpos,0)); } else//当地图是滚动到最右边的时候,显示出植物选择层,游戏菜单层 { gameMenuLoad(); choosePlantLoad(); this->unschedule(schedule_selector(CGameMapLayer::mapRoll));//滚动到极限的时候就关闭滚动定时器,所以还是不能使用一次定时器 } } 窗口的大小设置为900*600像素的,背景图片大小为1280*600像素的,所以每隔一定时间(0.05s),m_iMapXpos递减19像素,再根据m_iMapXpos设置背景精灵m_spMap的位置。当m_spMap滚到了最右边时,显示游戏菜单layer,选择职位开片layer。同理,当按下开始游戏,地图回滚也相应处理。流程如下: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |