一.在编辑器设置“用户数据”,在代码中引用
在使用cocosstudio时,有很多时候需要从编辑器中传递一些自己定义的数据,cocosstudio已经为我们提供了一个非常方便的接口图如下:
1.cocosstudio中:
2.代码中引用:
二.数据解析
在上面我们已经在编辑器中设置好我们要传递的数据,如“len,2880|ybegin,0|yend,150”,并且我们在代码中取到了这个字符串,下面我们需要通过这个字符串来得到我们需要的数据:
1.添加代码
#pragma once
#include "cocos2d.h"
USING_NS_CC;
class StringUtil : public Object {
public:
static StringUtil* sharedStrUtil();
bool init();
/** 用分隔符分割字符串,结果存放到一个列表中,列表中的对象为CCString */
Array* split(const char* srcStr, const char* sSep);
std::string getDateID(std::string _str, char* _id);
private:
static StringUtil* mStringUtil;
};
#include "StringUtil.h"
StringUtil* StringUtil::mStringUtil = NULL;
StringUtil* StringUtil::sharedStrUtil(){
if (mStringUtil == NULL) {
mStringUtil = new StringUtil();
if (mStringUtil && mStringUtil->init()) {
mStringUtil->autorelease();
}
else {
CC_SAFE_DELETE(mStringUtil);
mStringUtil = NULL;
}
}
return mStringUtil;
}
bool StringUtil::init(){
return true;
}
Array* StringUtil::split(const char* srcStr, const char* sSep){
CCArray* stringList = CCArray::create();
int size = strlen(srcStr);
/* 将数据转换为Cocos2d-x字符串对象 */
CCString* str = CCString::create(srcStr);
int startIndex = 0;
int endIndex = 0;
endIndex = str->_string.find(sSep);
CCString* spliStr = NULL;
/* 根据分隔符拆分字符串,并添加到列表中 */
while (endIndex > 0) {
spliStr = CCString::create("");
/* 截取字符串 */
spliStr->_string = str->_string.substr(startIndex, endIndex);
/* 添加字符串到列表 */
stringList->addObject(spliStr);
/* 截取剩下的字符串 */
str->_string = str->_string.substr(endIndex + 1, size);
/* 查找下一个分隔符所在下标 */
endIndex = str->_string.find(sSep);
}
/* 剩下的字符串也添加进列表 */
if (str->_string.compare("") != 0) {
stringList->addObject(CCString::create(str->_string));
}
return stringList;
}
std::string StringUtil::getDateID(std::string _str, char* _id){
CCArray *strlist = StringUtil::sharedStrUtil()->split(_str.c_str(), "|");
CCObject *object = NULL;
CCARRAY_FOREACH(strlist, object)
{
CCString *str = (CCString*)object;
CCLOG(str->getCString());
CCArray *strlist1 = StringUtil::sharedStrUtil()->split(str->getCString(), ",");
CCObject *object1 = NULL;
bool isreturn = false;
CCARRAY_FOREACH(strlist1, object1)
{
CCString *str1 = (CCString*)object1;
CCLOG(str1->getCString());
if (isreturn)
{
return str1->getCString();
}
if (strcmp(str1->getCString(), _id) == 0)
{
isreturn = true;
}
}
}
}
2.引用
在StringUtil::sharedStrUtil()->getDateID中传入之前获得的字符串,并且传入cocosstudio中用户数据里面缩写的关键字
三.纯c++的数据处理
static float getDateID(std::string _str,char* _id){
const char* split = "|";
const char* split1 = ",";
char* p;
char* pNext = NULL;
p = strtok_s(const_cast<char*>(_str.c_str()), split, &pNext);
while (p != NULL){
log("p:%s", p);
char* p1;
char* pNext1 = NULL;
p1 = strtok_s(p, split1, &pNext1);
while (p1 != NULL){
log("p1:%s", p1);
if (strcmp(p1,_id)==0)
{
p1 = strtok_s(NULL, split1, &pNext1);
return atof(p1);
}
p1 = strtok_s(NULL, split1, &pNext1);
}
p = strtok_s(NULL, split, &pNext);
}
return 0;
};