zoukankan      html  css  js  c++  java
  • cocos2d-x 2.1 -- 读取.plist文件

    在cocos2d-x中可以用.plist格式的文件来保存数据,它是XML文件格式的一种,在cocos2d-x解析.plist方面相关的资料比较少,但本身也很简单,要解析.plist文件可以参考cocos2d-x类库中的CCSpriteFrameCache类和CCParticleSystem类,它主要是使用CCDictionary类来对.plist文件进行操作。

    下面有一个.plist文件:

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
    3. <plist version="1.0">  
    4. <dict>  
    5.     <key>level1</key>  
    6.     <dict>  
    7.         <key>bg_far_scene</key>  
    8.         <dict>  
    9.             <key>path</key>  
    10.             <string>images/far_scene.png</string>  
    11.             <key>pos</key>  
    12.             <string>{358, 309}</string>  
    13.         </dict>  
    14.         <key>bg_near_scene</key>  
    15.         <dict>  
    16.             <key>path</key>  
    17.             <string>images/near_scene.png</string>  
    18.             <key>pos</key>  
    19.             <string>{360, 100}</string>  
    20.         </dict>  
    21.     </dict>  
    22. </dict>  
    23. </plist>  

    读取.plist文件的代码如下:

    1. const char* testPlistPath = "BSPlistDatas\test.plist";  
    2. const char* fullPath = CCFileUtils::sharedFileUtils()->fullPathFromRelativeFile("test.plist", testPlistPath);  
    3. CCDictionary* plistDic = CCDictionary::createWithContentsOfFile(testPlistPath);  
    4.   
    5. CCDictionary* levelDic = dynamic_cast<CCDictionary*>(plistDic->objectForKey("level1"));  
    6. CCDictionary* farScene = dynamic_cast<CCDictionary*>(levelDic->objectForKey("bg_far_scene"));  
    7. CCString* farScenePath = dynamic_cast<CCString*>(farScene->objectForKey("path"));  
    8. CCPoint point = CCPointFromString(farScene->valueForKey("pos")->getCString());  
    9.       
    10. CCLog("path = %s", farScenePath->getCString());  
    11. CCLog("pos = %f, %f", point.x, point.y);  

    第一行是.plist文件的相对路径,通过CCFileUtils类获得文件中绝对路径后,使用CCDictionary::createWithContensOfFile(filePath);将文件中内容加载到CCDictionary数据结构的内存中,然后通过xxxForKey获得相应的key下的value。

    这里需要注意的是,当在读取'pos'的时候,它的值一个{x, y}的字符串,这是.plist文件中的数组存储规则,我们可以通过cocos2d-x提供函数api将这样的字符串转化为CCpoint对象。

    1. <span style="white-space:pre">  </span>CCPoint point = CCPointFromString(farScene->valueForKey("pos")->getCString());  

    上面这句话就是做了这样的一个转化的过程,同样的cocos2d-x还支持CCSize、CCRect的字符串的转化。他们转化的方法以及在.plist中对应的字符串格式如下:

    CCPoint: CCPointFromString();{x, y}

    CCSize:  CCSizeFromString();{w, h}

    CCRect: CCSizeFromString();{x, y, w, h}

    这样我们2D游戏所初始化所需要的数据都基本上够用了,可以尝试将游戏的初始数据放在.plist中,然后修改调整数值就可以直接修改plist文件,而无需重新编译程序了,从而实现游戏数据和游戏逻辑的分离。

    在cocos2d-x中可以用.plist格式的文件来保存数据,它是XML文件格式的一种,在cocos2d-x解析.plist方面相关的资料比较少,但本身也很简单,要解析.plist文件可以参考cocos2d-x类库中的CCSpriteFrameCache类和CCParticleSystem类,它主要是使用CCDictionary类来对.plist文件进行操作。

    下面有一个.plist文件:

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
    3. <plist version="1.0">  
    4. <dict>  
    5.     <key>level1</key>  
    6.     <dict>  
    7.         <key>bg_far_scene</key>  
    8.         <dict>  
    9.             <key>path</key>  
    10.             <string>images/far_scene.png</string>  
    11.             <key>pos</key>  
    12.             <string>{358, 309}</string>  
    13.         </dict>  
    14.         <key>bg_near_scene</key>  
    15.         <dict>  
    16.             <key>path</key>  
    17.             <string>images/near_scene.png</string>  
    18.             <key>pos</key>  
    19.             <string>{360, 100}</string>  
    20.         </dict>  
    21.     </dict>  
    22. </dict>  
    23. </plist>  

    读取.plist文件的代码如下:

    1. const char* testPlistPath = "BSPlistDatas\test.plist";  
    2. const char* fullPath = CCFileUtils::sharedFileUtils()->fullPathFromRelativeFile("test.plist", testPlistPath);  
    3. CCDictionary* plistDic = CCDictionary::createWithContentsOfFile(testPlistPath);  
    4.   
    5. CCDictionary* levelDic = dynamic_cast<CCDictionary*>(plistDic->objectForKey("level1"));  
    6. CCDictionary* farScene = dynamic_cast<CCDictionary*>(levelDic->objectForKey("bg_far_scene"));  
    7. CCString* farScenePath = dynamic_cast<CCString*>(farScene->objectForKey("path"));  
    8. CCPoint point = CCPointFromString(farScene->valueForKey("pos")->getCString());  
    9.       
    10. CCLog("path = %s", farScenePath->getCString());  
    11. CCLog("pos = %f, %f", point.x, point.y);  

    第一行是.plist文件的相对路径,通过CCFileUtils类获得文件中绝对路径后,使用CCDictionary::createWithContensOfFile(filePath);将文件中内容加载到CCDictionary数据结构的内存中,然后通过xxxForKey获得相应的key下的value。

    这里需要注意的是,当在读取'pos'的时候,它的值一个{x, y}的字符串,这是.plist文件中的数组存储规则,我们可以通过cocos2d-x提供函数api将这样的字符串转化为CCpoint对象。

    1. <span style="white-space:pre">  </span>CCPoint point = CCPointFromString(farScene->valueForKey("pos")->getCString());  

    上面这句话就是做了这样的一个转化的过程,同样的cocos2d-x还支持CCSize、CCRect的字符串的转化。他们转化的方法以及在.plist中对应的字符串格式如下:

    CCPoint: CCPointFromString();{x, y}

    CCSize:  CCSizeFromString();{w, h}

    CCRect: CCSizeFromString();{x, y, w, h}

    这样我们2D游戏所初始化所需要的数据都基本上够用了,可以尝试将游戏的初始数据放在.plist中,然后修改调整数值就可以直接修改plist文件,而无需重新编译程序了,从而实现游戏数据和游戏逻辑的分离。

  • 相关阅读:
    模块(相当于Java里的包)
    if_else_while_for
    用户交互
    Python入门
    BigInteger类及方法应用
    selenium+java破解极验滑动验证码的示例代码
    Postman 使用详解
    Postman用法简介
    伟大架构师的秘密【转载】
    深入理解HTTP协议(转)
  • 原文地址:https://www.cnblogs.com/worldtraveler/p/3059403.html
Copyright © 2011-2022 走看看