Cocos2D-x3.x:cocostudio用户数据使用

一.在编辑器设置“用户数据”,在代码中引用

在使用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;
	};

本文参考:Cocos2D-x游戏开发之二十四:自定义字符串分割类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值