LabelReader分析

来源:互联网 发布:热力计算软件 编辑:程序博客网 时间:2024/05/17 08:57
LabelReader分析:1、在cocoStudio下有很多以...Reader为后缀的类,如LabelReader,ButtonReader等等,这些类用来解析json文件中对应的子对象,如Lable,Button,并把这些属性设置给相应控件2、void LabelReader::setPropsFromJsonDictionary(ui::Widget *widget, const rapidjson::Value &options){    WidgetReader::setPropsFromJsonDictionary(widget, options);        //获取json文件全路径,这里的路径不包括json文件名,只有目录部分。    //如Export/heroGrowup/mm.json,则jsonPath为Export/heroGrowup/。    std::string jsonPath = GUIReader::shareReader()->getFilePath();        ui::Label* label = (ui::Label*)widget;    bool touchScaleChangeAble = DICTOOL->getBooleanValue_json(options, "touchScaleEnable");    label->setTouchScaleChangeEnabled(touchScaleChangeAble);    //设置显示内容    const char* text = DICTOOL->getStringValue_json(options, "text","Text Label");    label->setText(text);       label->setFontSize(DICTOOL->getIntValue_json(options, "fontSize",20));        //重点,这里是设置字库,至于如何在cocoStudio中设置字库,可以参考    http://blog.csdn.net/tianxiawuzhei/article/details/45693601 文章,    生成json文件,字库字段一般如:"fontName": "fonts/STHUPO.ttf"。    std::string fontName = DICTOOL->getStringValue_json(options, "fontName","微软雅黑");    std::string file_extension = "";    size_t pos = fontName.find_last_of('.');    if (pos != std::string::npos)    {        //获取字库文件的后缀名,并转化为大写        file_extension = fontName.substr(pos, fontName.length());        std::transform(file_extension.begin(),file_extension.end(), file_extension.begin(), (int(*)(int))toupper);    }        //如果字库文件以.TTF结尾,则字库路径为jsonPath路径(如Export/heroGrowup/)+fontName(如"fonts/STHUPO.ttf"),    //这样就会导致一个问题,我们必须把字库文件放到相对与json文件所在的目录下,因为我们通常都会根据    //功能来分目录存放json文件,那么我们需要在不同的功能模块目录下都放一份字库文件,这个是不可行的,那会    //使我们的游戏包很大。    if (file_extension.compare(".TTF") == 0)    { std::string fontFilePath = jsonPath.append(fontName); label->setFontName(fontFilePath);    }    else    { label->setFontName(fontName);    }        bool aw = DICTOOL->checkObjectExist_json(options, "areaWidth");    bool ah = DICTOOL->checkObjectExist_json(options, "areaHeight");    if (aw && ah)    {        CCSize size = CCSize(DICTOOL->getFloatValue_json(options, "areaWidth"),DICTOOL->getFloatValue_json(options,"areaHeight"));        label->setTextAreaSize(size);    }    bool ha = DICTOOL->checkObjectExist_json(options, "hAlignment");    if (ha)    {        label->setTextHorizontalAlignment((CCTextAlignment)DICTOOL->getIntValue_json(options, "hAlignment"));    }    bool va = DICTOOL->checkObjectExist_json(options, "vAlignment");    if (va)    {        label->setTextVerticalAlignment((CCVerticalTextAlignment)DICTOOL->getIntValue_json(options, "vAlignment"));    }            WidgetReader::setColorPropsFromJsonDictionary(widget, options);}3、根据上面的分析我们知道,在cocoStudio中使用Label控件时,使用第三方字库,会有上面分析的问题,那么我们怎么解决这个问题呢?  3.1、  把所有的功能json文件都放到同一个目录下,然后在这个目录下放字库文件,这样做  会导致所有的功能模块都放在一起,导致查找困难。  3.2、  修改底层代码,就是把相对于json文件目录去获取字库路径,改为直接根据  "fontName": "fonts/STHUPO.ttf"获取文件路径,那么我们的字库文件存放路径就是  Resources/fonts/STHUPO.ttf,所以可以通过fonts/STHUPO.ttf路径得到字库文件。  修改后的代码:      std::string fontName = DICTOOL->getStringValue_json(options, "fontName","微软雅黑");    std::string file_extension = "";    size_t pos = fontName.find_last_of('.');    /*    if (pos != std::string::npos)    {        file_extension = fontName.substr(pos, fontName.length());        std::transform(file_extension.begin(),file_extension.end(), file_extension.begin(), (int(*)(int))toupper);    }        if (file_extension.compare(".TTF") == 0)    {        std::string fontFilePath = jsonPath.append(fontName);        label->setFontName(fontFilePath);    }    else    { */        label->setFontName(fontName);  //  }    

0 0
原创粉丝点击