cocos植物大战僵尸(三)游戏场景:地图滚动

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。同理,当按下开始游戏,地图回滚也相应处理。流程如下:


 

cocos植物大战僵尸是一款由开发者使用cocos2d-x3.17版本开发的游戏游戏具有策略性,背景是僵尸入侵玩家的家,玩家需要通过放置具有攻击性的植物来抵御僵尸的入侵。游戏的目标是从第一关开始,选择左上角的卡片放置豌豆射手,用豌豆射手来防御僵尸。游戏结束的条件是僵尸被打死或者僵尸越过屋子。通关后,玩家可以获得卡片,并收集植物卡片来打倒僵尸。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [植物大战僵尸.rar](https://download.csdn.net/download/yx______/12070735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [植物大战僵尸破产版--cocos studio](https://blog.csdn.net/weixin_46008509/article/details/107088661)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Cocos2d-x简单游戏<植物大战僵尸>代码实现|第九部分:游戏场景GameScene.cpp<后续会提供源码下载链接>](https://blog.csdn.net/u011286702/article/details/21400589)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四夕立羽

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值