Cocos2dx 小技巧(七) 静态数据

来源:互联网 发布:ubuntu打包system.img 编辑:程序博客网 时间:2024/04/30 14:03

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

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. auto dic = Dictionary::createWithContentsOfFile(std::string& pFileName);//读取到字典里,存于缓存中。  
  2. //或者  
  3. auto array = Array::createWithContentsOfFile(std::string& pFileName);//读取与array数组中。  
下面用一个小例子简单介绍下如何使用:
假如要做一款名为《爱上喜羊羊的灰太狼》,NPC有俩,分别是喜羊羊与灰太狼,他们在plist中的ID分别为10 和 20.如下:
[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">  
  3. <plist version="1.0">  
  4. <array>  
  5.     <dict>  
  6.         <key>id</key>  
  7.         <string>10</string>  
  8.         <key>name</key>  
  9.         <string>喜羊羊</string>  
  10.         <key>image</key>  
  11.         <string>xiyy.png</string>  
  12.         <key>info</key>  
  13.         <string>是一只羊,星座:白羊座,喜欢被灰太狼吃</string>  
  14.     </dict>  
  15.     <dict>  
  16.         <key>id</key>  
  17.         <string>20</string>  
  18.         <key>name</key>  
  19.         <string>灰太狼</string>  
  20.         <key>image</key>  
  21.         <string>huitl.png</string>  
  22.         <key>info</key>  
  23.         <string>来自北方的狼,星座:猎户座,喜欢吃喜羊羊</string>  
  24.     </dict>  
  25. </array>  
  26. </plist>  
因为在plist中NPC数据是存在array中,所以这里我选择用Array来读取数据,过程如下:
[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. auto m_array = Array::createWithContentsOfFile("info.plist");//读取plist数据,存于m_array数组中  
  2.   
  3. //遍历m_array数组,通过NPC的id找到想要的NPC信息  
  4. for(int i=0;i<m_array->count();i++)  
  5. {  
  6.     //从上面的plist内容可以看出,每个NPC的数据是以dic(字典)的方式存于array数组中  
  7.     auto dic = static_cast<Dictionary*>(m_array->getObjectAtIndex(i));  
  8.     int id = (static_cast<String*>(dic->objForKey("id")))->intValue();//从字典中找到id对应的key值,并转化成int型  
  9.       
  10.     //如果id = 10,即这个是喜羊羊的id  
  11.     if(id == 10)  
  12.     {  
  13.         std::string name_str = (static_cast<String*>(dic->objForKey("name")))->getString();//读取喜羊羊的名字  
  14.         std::string image_str = (static_cast<String*>(dic->objForKey("image")))->getString();//读取喜羊羊图片名  
  15.         std::string info_str = (static_cast<String*>(dic->objForKey("info")))->getString();//读取喜羊羊的介绍         
  16.         ...  
  17.         //下面随便你去折腾  
  18.     }  
  19. }  


0 0