小羊驼和你一起学习cocos2d-x之八(tinyXml android cocos2d-x 2.x)

http://blog.csdn.net/linyongliang
欢迎转载:请保留原文出处 谢谢

本次介绍如何在cocos2d-x上使用tinyXml库 对于tinyxml我不做多介绍,不懂朋友度娘 谷哥

tinyxml 在win32上是可以直接使用没啥问题。但是放到android上会出现路径找不到,这里就是要帮大家解决这个问题。其实这个代码是人家写的 我改了一点让2.X可 以使用。谢谢那位朋友 。具体出处忘了 真不好意思


其中引擎自带了一个解析器。里面是有文件路径获取方法的。那位朋友也是根据这个原来来修改tinyXml库

具体我吧代码弄上来,其实是给tinyXml加一个加载的成员函数 如下

 

bool TiXmlDocument::LoadFileByCocos2d( const char * filename, TiXmlEncoding encoding /*= TIXML_ENCODING_UTF8*/ )
{
	if ( !filename ) 
	{
		SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );
		return false;
	}

	// Delete the existing data:
	Clear();
	location.Clear();

	// Get the file size, so we can pre-allocate the string. HUGE speed impact.
	const char *pfilePath = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(filename);
	TIXML_STRING __filename( pfilePath );
	value = __filename;

	unsigned long length = 0;

	char *pBuffer =(char*) CCFileUtils::sharedFileUtils()->getFileData(pfilePath, "rt", &length);

	if (!pBuffer)
	{
		SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );
		return false;
	}

	// Strange case, but good to handle up front.
	if ( length <= 0 )
	{
		SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );
		return false;
	}

	const char* p = pBuffer;	// the read head
	char* q = pBuffer;			// the write head
	const char CR = 0x0d;
	const char LF = 0x0a;

	pBuffer[length] = 0;
	while( *p ) {
		assert( p < (pBuffer+length) );
		assert( q <= (pBuffer+length) );
		assert( q <= p );

		if ( *p == CR ) {
			*q++ = LF;
			p++;
			if ( *p == LF ) {		// check for CR+LF (and skip LF)
				p++;
			}
		}
		else {
			*q++ = *p++;
		}
	}
	assert( q <= (pBuffer+length) );
	*q = 0;

	Parse( pBuffer, 0, encoding );

	return !Error();
}

bool TiXmlDocument::SaveFile( const char * filename ) const
{
	// The old c stuff lives on...
	FILE* fp = TiXmlFOpen( filename, "w" );
	if ( fp )
	{
		bool result = SaveFile( fp );
		fclose( fp );
		return result;
	}
	return false;
}//具体哪里加 自己找
bool loadConfig()//如何使用 简单个例子 自己看吧
{
	bool ret=false;
	do {
		TiXmlDocument doc;
		TiXmlElement *elementRoot,*elementIndex,*elementLast,*elementChildIndex,*elementChildLast;
		TiXmlAttribute *attribute;
		int id;
		doc.LoadFileByCocos2d("config.xml");
		elementRoot=doc.FirstChildElement();		                
                attribute=elementIndex->FirstAttribute();
		id=attribute->IntValue();
		vector<Point>vecPoint;
		elementChildIndex=elementIndex->FirstChildElement("vertex");
		elementChildLast=(TiXmlElement *)elementIndex->LastChild("vertex");
		while(elementChildIndex!=elementChildLast)
		{
			attribute=elementChildIndex->FirstAttribute();
			point.x=attribute->IntValue();
			attribute=attribute->Next();
			point.y=attribute->IntValue();
			vecPoint.push_back(point);
			elementChildIndex=elementChildIndex->NextSiblingElement();
		}
		attribute=elementChildIndex->FirstAttribute();
		point.y=attribute->IntValue();
		attribute=attribute->Next();
		point.x=attribute->IntValue();
		vecPoint.push_back(point);
		mapArray.insert(map<int_16_u,vector<Point> >::value_type(id,vecPoint));
		doc.Clear();
		ret = true;
	} while (0);
	return ret;
}
android的Android.mk配置
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := game_shared

LOCAL_MODULE_FILENAME := libgame

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/SceneGreet.cpp \
                   ../../Classes/SceneSet.cpp \
                   ../../Classes/ScenePlay.cpp \
                   ../../Classes/Bullet.cpp \
                   ../../Classes/Fish.cpp \
                   ../../Classes/tinyxml.cpp \
                   ../../Classes/tinystr.cpp \
                   ../../Classes/tinyxmlparser.cpp \
                   ../../Classes/tinyxmlerror.cpp \
                   ../../Classes/Config.cpp \
                                     
                                     
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes                   

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static
            
include $(BUILD_SHARED_LIBRARY)

$(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions)








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值