Cocos2dx 小技巧(七) 静态数据

本文简要介绍了Cocos2dx开发中关于静态数据的一些实用技巧,强调了程序员在工作之余阅读非技术书籍的重要性,认为这有助于个人成长。
摘要由CSDN通过智能技术生成

中午在当当网买的两本书到了,一本是《百年孤独》,用来看的;还有一本是《诛仙2》,用来收藏的。

我的桌上叠着两堆厚厚的书,一大半都是非技术类的书,为什么呢?因为技术书贵啊!(开玩笑的)。读书是件很有意义的事,也是我从小的乐趣所在,毕竟生活如此的丰富美好。每天睡前几乎都会翻几页书,偶尔也会看看技术类的书,当然了这是少数情况。在我看来,程序员如果在工作外的时间都还钻在代码的世界里不能自己拔自己,那可能永远也只是一个程序员了。

前辈说:程序员的形象就是邋遢,人字拖+沙滩裤,于是你就这么穿了;前辈说:程序员很难找到女朋友,也许你的爱情观就发生了改变,一有空就对着苍老师来上一发;前辈说,程序员不是程序员,而是程序猿,于是你也认同了这个说法,并以这个称号而沾沾自喜。
其实随时都要认为自己的职业是高尚的,脱离了低级趣味的。偶尔应该告别自己的右手,尝试着穿一次正装,西装皮鞋上身,自信油然而生。
穿什么就是什么,森马休闲服。


貌似扯远了。赶紧回到正题!
-----------------------
这次讲下静态数据的使用。额,看到静态数据几个字是不是感觉很有技术性,什么static之类的。哈哈。
那么啥是静态数据呢?静态数据就是程序中的只读数据,例如我们游戏里有一些NPC,他们的名字、图片、人物介绍都是固定不变的,并不会再游戏过程中发生改变,例如你并不可能说在《富甲封神传》这款游戏里用哪吒打败了李靖就认为哪吒是李靖的老子吧?当然了,在游戏开发过程中这些NPC的属性数值可能经常变动,如哪吒的基础血量本来是100,后来觉得100太小,于是你决定给他改成101。为了便于修改,常规的做法就是将这些数据放到外部文件保存。
这里就选择用plist保存静态数据,然后用下面的方法读取plist数据:

auto dic = Dictionary::createWithContentsOfFile(std::string& pFileName);//读取到字典里,存于缓存中。
//或者
auto array = Array::createWithContentsOfFile(std::string& pFileName);//读取与array数组中。
下面用一个小例子简单介绍下如何使用:
假如要做一款名为 《爱上喜羊羊的灰太狼》,NPC有俩,分别是喜羊羊与灰太狼,他们 在plist中的ID分别为10 和 20.如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
	<dict>
		<key>id</key>
		<string>10</string>
		<key>name</key>
		<string>喜羊羊</string>
		<key>image</key>
		<string>xiyy.png</string>
		<key>info</key>
		<string>是一只羊,星座:白羊座,喜欢被灰太狼吃</string>
	</dict>
	<dict>
		<key>id</key>
		<string>20</string>
		<key>name</key>
		<string>灰太狼</string>
		<key>image</key>
		<string>huitl.png</string>
		<key>info</key>
		<string>来自北方的狼,星座:猎户座,喜欢吃喜羊羊</string>
	</dict>
</array>
</plist>
因为在plist中NPC数据是存在array中,所以这里我选择用Array来读取数据,过程如下:
auto m_array = Array::createWithContentsOfFile("info.plist");//读取plist数据,存于m_array数组中

//遍历m_array数组,通过NPC的id找到想要的NPC信息
for(int i=0;i<m_array->count();i++)
{
	//从上面的plist内容可以看出,每个NPC的数据是以dic(字典)的方式存于array数组中
	auto dic = static_cast<Dictionary*>(m_array->getObjectAtIndex(i));
	int id = (static_cast<String*>(dic->objForKey("id")))->intValue();//从字典中找到id对应的key值,并转化成int型
	
	//如果id = 10,即这个是喜羊羊的id
	if(id == 10)
	{
		std::string name_str = (static_cast<String*>(dic->objForKey("name")))->getString();//读取喜羊羊的名字
		std::string image_str = (static_cast<String*>(dic->objForKey("image")))->getString();//读取喜羊羊图片名
		std::string info_str = (static_cast<String*>(dic->objForKey("info")))->getString();//读取喜羊羊的介绍		
		...
		//下面随便你去折腾
	}
}


嘿嘿。结束了。

很短,但可以旋转。


尊重原创,转载请注明来源:http://blog.csdn.net/start530/article/details/23301233

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值