Cocos2d-x--使用CCDictionary读取plist文件

frames读取:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
      <dict>
      <key>frames</key>
        <dict>
            <key>game_start/bg_image.png</key>
            <dict>
                <key>width</key>
                <integer>640</integer>
                <key>height</key>
                <integer>1136</integer>
                <key>originalWidth</key>
                <integer>640</integer>
                <key>originalHeight</key>
                <integer>1136</integer>
                <key>x</key>
                <integer>0</integer>
                <key>y</key>
                <integer>0</integer>
                <key>offsetX</key>
                <real>0</real>
                <key>offsetY</key>
                <real>0</real>
            </dict>
            <key>game_start/logo.png</key>
            <dict>
                <key>width</key>
                <integer>509</integer>
                <key>height</key>
                <integer>416</integer>
                <key>originalWidth</key>
                <integer>509</integer>
                <key>originalHeight</key>
                <integer>416</integer>
                <key>x</key>
                <integer>0</integer>
                <key>y</key>
                <integer>1138</integer>
                <key>offsetX</key>
                <real>0</real>
                <key>offsetY</key>
                <real>0</real>
            </dict>
            <key>game_start/play.png</key>
            <dict>
                <key>width</key>
                <integer>361</integer>
                <key>height</key>
                <integer>142</integer>
                <key>originalWidth</key>
                <integer>361</integer>
                <key>originalHeight</key>
                <integer>142</integer>
                <key>x</key>
                <integer>511</integer>
                <key>y</key>
                <integer>1138</integer>
                <key>offsetX</key>
                <real>0</real>
                <key>offsetY</key>
                <real>0</real>
            </dict>
            <key>game_start/share.png</key>
            <dict>
                <key>width</key>
                <integer>168</integer>
                <key>height</key>
                <integer>113</integer>
                <key>originalWidth</key>
                <integer>168</integer>
                <key>originalHeight</key>
                <integer>113</integer>
                <key>x</key>
                <integer>0</integer>
                <key>y</key>
                <integer>1556</integer>
                <key>offsetX</key>
                <real>0</real>
                <key>offsetY</key>
                <real>0</real>
            </dict>
            <key>game_start/store.png</key>
            <dict>
                <key>width</key>
                <integer>168</integer>
                <key>height</key>
                <integer>113</integer>
                <key>originalWidth</key>
                <integer>168</integer>
                <key>originalHeight</key>
                <integer>113</integer>
                <key>x</key>
                <integer>170</integer>
                <key>y</key>
                <integer>1556</integer>
                <key>offsetX</key>
                <real>0</real>
                <key>offsetY</key>
                <real>0</real>
            </dict>
   </dict>

结构 :


level


Key


Value


1


frames


dict


2


game_start/bg_image.png

game_start/logo.png

game_start/play.png

game_start/share.png

game_start/store.png


dict

dict

dict

dict

dict


3


Width

Height

originalWidth

originalHeight

X

Y

offsetX

offsetY


integer

integer

integer

integer

integer

integer

real

real

重点 :key 永远都是一个字符串类型,value需要根据名称来判断是什么类型

1、设置文件路径

//相对路径
const char* plistpath="NewUi0.plist";
//通过CCFileUtils的fullPathFromFile方法获取绝对路径
CCFileUtils* fileutils=CCFileUtils::shareFileUtils();
std::string pfullpath=fileutils->fullPathForFileName(plistpath);
Const char* cfullpath = pfullpath.c_str();

2、通过上面获取到的路径加载plist文件到CCDictionary 获得plist的根节点 dict容器

CCDictionary* rootdic =CCDictionary::createWithContentsOfFile(cfullpath);

3、key frames是一个dict字典类型 我们先通过根节点获得frames的dict容器

//第一层frames
CCDictionary* framesdic =dynamic_cast<CCDictionary*>rootdic->objectForKey("frames");

4、Frames 下有5个key 获取第二层下所有key值

CCArray* imgkeyArr =framedic->allkeys();     

5、通过for循环遍历CCArray 获取所有key值 通过key值得到dict

for(unsigned int i=0;i<imgkeyArr->count();i++)
    {
        //第二层key (level=2)
        CCString* ccstr1 =(CCString*)imgkeyArr->objectAtIndex(i);
        std::string imgKey = ccstr1->getCString();
        //输出第二层所有key值
        CCLOG("[%s]",imgKey.c_str());
        //第二层value dict
        CCDictionary* imgdic =dynamic_cast<CCDictionary*>(frameDic->objectForKey(imgKey));
        CCArray* imginfoArr =imgdic->allKeys();
        for(unsigned int j=0;j<imginfoArr->count();j++)
        {
            //第三层所有key (level=3)
            CCString* ccstr2 =(CCString*)imginfoArr->objectAtIndex(j);
            std::string imginfoKey = ccstr2->getCString();
            //通过第三层key值找到value值
            const CCString* values = imgdic->valueForKey(imginfoKey);
            std::string str = values->getCString();
            CCLOG("%s:%s",imginfoKey.c_str(),str.c_str());
        }
    }

结果:

Cocos2d-x--使用CCDictionary读取plist文件

时间: 2024-10-11 01:17:03

Cocos2d-x--使用CCDictionary读取plist文件的相关文章

cocos2d-实现读取.plist文件(使用数组CCArray)

学习札记之cocos2d-x2.1.1实现读取.plist文件(使用数组CCArray) [html] view plaincopyprint? <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dt

iOS开发读取plist文件、iphone中plist文件的

在Xcode中建立一个iOS项目后,会自己产生一个.plist文件,点击时会看见它显示的是类似于excel表格: 但是,如果打开方式选择Source Code,你会看见它其实是一个xml文件. 我们会做一个小例子,在这个例子中我们自己建立一个plist文件并填入数据,然后运行时读取这个plist文件,并将数据填写在界面上. 首先要知道读取plist文件的方法,一般来说,使用代码 NSString *plistPath = [[NSBundle mainBundle] pathForResourc

解决pathForResource返回nil, 无法读取plist文件问题

有很多人在设置plist文件的时候, 会发现读取不了plist文件里面的内容, 返回值为nil, 下面我们来解决一下这个问题. 首先我们打开工程并且按照下面的步骤来设置: 设置好后, 我们来写一段代码测试一下看看是否添加好: NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource:@"images" ofType:@"plist"]; _imageData 

[How to]如何自定义plist文件和读取plist文件内容

1.简介 plist作为IOS的固化文件,就好比java中properties文件,但是在IOS中plist是可读写的. 本文将介绍自定义静态的plist文件. 2.自定义静态plist文件 右击你的目的文件夹,然后选择[New File....]进行如下选择: 我们创建了一个goods的plist文件,它的默认内容是: 我们预计他是包含一个团购的cell内容,包含上平图片.名称.价格和当前购买人数 他是一个以数组,元素为字典类型,字典中以保存图片.名称.价格和当前购买人数信息: 可以如下定义:

cocos2d-x之读取plist文件

在resource文件夹下,添加data.plist文件 新建->resource->project list->open 就新建一个plist文件了, data.plist内容如下: 在bool HelloWorld::init()中添加如下内容,可在控制台中看见读取的内容 1 //使用这个工具类 2 FileUtils *fu = FileUtils::getInstance(); 3 //获取文件,此文件是dictionary类型的所以用getValueMapFromFile此方法

cocos2d-x 3.2读取plist文件

先在resource里创建plist文件 然后输入一下代码即可 FileUtils *fu=FileUtils::getInstance(); auto vm=fu->getValueMapFromFile("data.plist");//dictionary,如果是vector,使用fu->getValueVectorFromFile(const std::string &filename) log("%s",vm["name&quo

iOS -读取plist文件

//  UI-城市列表 // //  Created by jzq_mac on 15/7/30. //  Copyright (c) 2015年 jzq_mac. All rights reserved. // #import "ViewController.h" #import "DetailViewController.h" @interface ViewController ()<UITableViewDataSource,UITableViewDel

ios读取plist文件:

@property (nonatomic,strong) NSArray *imageData;//定义一个数组 //懒加载数据 -(NSArray *)imageDate { if(_imageDate==nil) { NSBundle *bundle=[NSBundle mainBundle];//mainBundle可以获取手机的任何资源 NSString *path=[bundle pathForResource:@"imageData" ofType:@"plist

unity3d读取plist或xml文件

本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/12949827 前一篇文章介绍了协同异步加载游戏场景,但前台没干活,浪费了.有的游戏在loading的时候会把一些游戏的Tips(小提示)介绍给玩家,我这里说一下是怎么实现的. 说到小提示,其实是后台有个配置文件,里面有很多提示语句,程序以一定的时间间隔随机读取一条,显示在界面上,很简单.这里说到配置文件,花样就多了,以前做co