【cocos2d-x 3.7 飞机大战】 决战南海I (六) 保存玩家数据

【cocos2d-x 3.7 飞机大战】 决战南海I (六) 保存玩家数据,第1张

概述        玩家要保存的数据可能很多,这里,我们只保存分数 这个类的成员变量和函数如下 //用户数据 *** 作的成员变量 UserDefault * m_userDefault; //要用到这种特殊的容器了。。 ValueVector m_vector; //记录玩家的当前分数 CC_SYNTHESIZE(int, m_score, Score); void save(); 我们使

玩家要保存的数据可能很多,这里,我们只保存分数

这个类的成员变量和函数如下

//用户数据 *** 作的成员变量	UserDefault * m_userDefault;		//要用到这种特殊的容器了。。	ValueVector m_vector;	//记录玩家的当前分数	CC_SYNTHESIZE(int,m_score,score);	voID save();

我们使用cocos2d-x提供的UserDefault类来实现数据保存功能


对于UserDefault类,我也不太熟悉,主要是参考官方文档和网上的例子来做的,不过基本思路还算清晰

bool SaveData::init(){		m_userDefault = UserDefault::getInstance();		m_vector = ValueVector();		m_score = 0;	//每玩一次游戏,分数的记录条数就会加一	m_userDefault->setIntegerForKey("count",(m_userDefault->getIntegerForKey("count",0)) + 1);	//首先判断XML文件是否存在,如果不存在的话就会执行if中的语句	if (m_userDefault->getBoolForKey("isExit",false) == false)	{		//玩家初次玩游戏会执行这里		m_userDefault->setBoolForKey("isExit",true);	}	else	{		//将分数记录保存在vector集合中		for (int i = 0; i < m_userDefault->getIntegerForKey("count") - 1; i++)		{			__String * index = String::createWithFormat("%d",i);			//将要放的数据使用Value包装一下			m_vector.push_back(Value(m_userDefault->getIntegerForKey(index->getCString())));		}	}	return true;}voID SaveData::save(){	/*本函数的整体思路是先对vector中保存的玩家数据进行排序,然后重新写入到xml文件中*/	//将玩家的分数保存到set集合中,以便排序,分数和原先的分数不同才保存	int i = 0;	for (auto tem : m_vector)	{		if (tem.asInt() == m_score)		{			break;		}		i++;	}	if (i == m_vector.size())	{		m_vector.push_back(Value(m_score));		//自定义排序函数,对m_vector中的内容进行排序,方便以后对数据的 *** 作		auto sortData = [](Value value1,Value value2)		{			return value1.asInt() > value2.asInt();		};		//调用c++模板中的sort函数进行排序,前俩个参数是数组的地址,最后一个参数是使用的排序函数		std::sort(m_vector.begin(),m_vector.end(),sortData);		//将玩家的得分保存在文件中		for (int i = 0; i < m_vector.size(); i++)		{			auto value = m_vector.at(i);			auto index = __String::createWithFormat("%d",i);			m_userDefault->setIntegerForKey(index->getCString(),value.asInt());		}	}	//单独保存本次游戏的得分	UserDefault::getInstance()->setIntegerForKey("currentscore",m_score);	//重新设置一下count	UserDefault::getInstance()->setIntegerForKey("count",m_vector.size());	//刷新	m_userDefault->flush();}
总结

以上是内存溢出为你收集整理的【cocos2d-x 3.7 飞机大战】 决战南海I (六) 保存玩家数据全部内容,希望文章能够帮你解决【cocos2d-x 3.7 飞机大战】 决战南海I (六) 保存玩家数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1069124.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存