Cocos2d-x操作:文件读取导致闪退


问题1:fopen
在vs下使用fopen进行文件处理,跑通了,但是移植到android下时就出现了一大推问题,首先需要理解的是在vs下开发资源是存放在执行文件的相同目录下的,而移植到android下时资源是存放在assets目录下的,之前尝试过使用以下的方法:
char* fileName = "bg.png"; 
string filepath = [/font][/color]FileUtils::getInstance()[font=Arial]->fullPathForFilename(fileName); 
FILE *fp = fopen(filepath.c_str(), "r");

结果还是报错,一进游戏就挂了,估计是跟底层有关,没有深究,解决方法是使用cocos2dx的CCFileUtil,推荐大家学习Cocos2d-x从零开始视频教程。
char* filename = "bg.png"; 
//获得文件在系统的绝对路径--assets/bg.png 
string filepath = FileUtils::getInstance()->fullPathForFilename(filename); 
//读取的字节数,读取失败则为0 
unsigned long len = 0; 
//读取的内容 
unsigned char *data =FileUtils::getInstance()->getFileData(filepath.c_str(), "rb", &len);

/* 
此处进行你对文件的操作 
*/

//最后记得释放内存 
if(len >0 && data) delete[] data;

/***********************接口说明***************************** 
static unsigned char* getFileData  ( const char *  pszFileName, 
const char *  pszMode, 
unsigned long *  pSize 

pszMode: 
r 以只读方式打开文件,该文件必须存在。 
r+ 以可读写方式打开文件,该文件必须存在。 
rb+ 读写打开一个二进制文件,允许读数据。 
rt+ 读写打开一个文本文件,允许读和写。 
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) 
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留) 
wb 只写打开或新建一个二进制文件;只允许写数据。 
wb+ 读写打开或建立一个二进制文件,允许读和写。 
wt+ 读写打开或着建立一个文本文件;允许读写。 
at+ 读写打开一个文本文件,允许读或在文本末追加数据。 
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。 
*/

问题2:tinyxml
使用tinyxml来读xml文件,之前我的做法是:
//根据xml数据创建动画 
string xmlFile_path = "bg.xml"; 
//读取动作XML文件 
tinyxml2::XMLDocument* doc=new tinyxml2::XMLDocument(); 
doc->LoadFile(xmlFile_path.c_str()); 
tinyxml2::XMLElement *ani_node=doc->RootElement(); 
tinyxml2::XMLElement *action_node=ani_node->FirstChildElement("action");

先把xml文件读取到一个buff,然后让tinyxml来解析这个buff,让tinyxml绕过了读取文件失败的bug
//根据xml数据创建动画 
string xmlFile_path = "bg.xml"; 
//获得文件在系统的绝对路径 
string xmlfilepath = [/font]FileUtils::getInstance()[font=Arial]->fullPathForFilename(xmlFile_path.c_str()); 
//读取的字节数,读取失败则为0 
unsigned long len = 0; 
//读取的内容 
unsigned char *data =[/font]FileUtils::getInstance()[color=#362e2b][font=Arial]->getFileData(xmlfilepath.c_str(), "r", &len); 
//读取动作XML文件 
tinyxml2::XMLDocument* doc=new tinyxml2::XMLDocument(); 
doc->Parse((char*)data, len); 
tinyxml2::XMLElement *ani_node=doc->RootElement(); 
tinyxml2::XMLElement *action_node=ani_node->FirstChildElement("action");

更多相关知识,大家可以登陆良师益友网学习视频教程。

现在更有面向广大技术宅开展的“冰桶挑战"活动等着大家积极前往挑战自我,成为设计师,只要几十块哦~

时间: 2024-08-08 11:44:13

Cocos2d-x操作:文件读取导致闪退的相关文章

windows10下autocad出现致命错误导致闪退怎么办

在windows10系统下,使用autocad2014复制文件时,偶尔会遇到AutoCAD错误中断提示"致命错误:Unhandled Access Violation Reading 0x0040 Exception at 3fd17cb1h",最终导致闪退,编辑的文件丢失等.经过仔细排查,发现是AUTOCAD版本过低引起,通过下载最新补丁,可以解决此问题.下面,小编就为大家分享下具体步骤. 推荐:win10 64位旗舰版官网下载 具体方法如下: 1.发生错误后点如图点击确定: 2.如

COCOS2D-X中UI动画导致闪退与UI动画浅析

前两天和同事一起查一个游戏的闪退问题,log日志显示最后挂在CCNode* ActionNode::getActionNode()函数中的首行CCNode* cNode = dynamic_cast<CCNode*>(m_Object),由于不是必现bug,出现概率极低,单从代码来看,唯一的可能就是走到这里时m_Object已经为null了,所以才会挂出去.当然经过不懈努力,问题还是得以解决,这里mark一下,留作以后复习. 想方设法也无法重现的情况下,我们只能一步一步的分析UI动画的生命周期

iOS 10 因苹果健康导致闪退 crash-b

如果在app中调用了苹果健康,iOS10中会出现闪退.控制台报出的原因是: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'NSHealthUpdateUsageDescription must be set in the app's Info.plist in order to request write authorization.' 这是因为我们要在info.plist文件中声

iOS 10 因苹果健康导致闪退 crash

如果在app中调用了苹果健康,iOS10中会出现闪退.控制台报出的原因是: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'NSHealthUpdateUsageDescription must be set in the app's Info.plist in order to request write authorization.' 这是因为我们要在info.plist文件中声

自己编写的.sh脚本文件运行完闪退解决方案

gnome-terminal设置如下图: 直接原因是,“命令退出时:退出终端”造成的!! 解决方案如下: 1. Ctrl + Alt + F1 ,进入文本操作模式: 2. 登录后,执行:yum install Terminal (注意:Terminal 首字母必须大写): 3.安装完成后,按 Ctrl + Alt + F7 回到桌面操作界面: 4.在“应用程序”菜单栏中找到 “终端” (注意此时系统中有两个终端,打开刚刚安装的那个)打开: 5.执行 gnome-terminal   -x  mu

ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题

ThreadPool是.net System.Threading命名空间下的线程池对象.使用QueueUserWorkItem实现对异步委托的先进先出有序的回调.如果在回调的方法里面发生异常则应用程序会出现闪退.当然是指不处理那个异常的情况下.这不公司的CMS在生产环境频频出现闪退的情况.该死的是,原来用老机器配置不高的情况下没有出现过.换了更好的新机器后出现的. // // 摘要: // 将方法排入队列以便执行,并指定包含该方法所用数据的对象.此方法在有线程池线程变得可用时执行. // //

如何应对应用程序闪退、强退的现象

如何应对应用程序闪退.强退的现象 各位机友在使用手机的过程当中肯定都遇到过应用程序闪退或者强制关闭的情况,这个问题让人很困惑也很苦恼.其实无论是在iOS系统还是在Android系统当中,这种情况都会屡屡发生,那如何来解决这个的问题呢?经过查看一些文章,笔者为大家整理了一些针对应用程序出现闪退或者强制关闭状况的解决方法,以备大家不时之需.本篇文章的侧重点还是在于Android手机,毕竟开源的Android系统在为用户带来个性化操作的同时,也同样带来了这样那样的烦恼. 一.闪退和强制关闭现象 首先让

Tomcat start.bat闪退:JRE_HOME环境变量配置不对

最近在配置Tomcat上遇到startup.bat启动闪退,在网上找了很多方法,都没解决.后来在网上找到两种问题,更改了两次,解决了.现将我遇到的问题分享,希望对遇到同样问题有帮助. 1.很多初学者对jdk的配置不明确,不知道jdk与jre是做什么的,配置文件的时候,难免将jdk与jre配置混淆. 建议卸载jdk后,在F盘新建jdk文件,在里面新建jdk.jre文件,便于区分. 2.安装jdk,第一个路径:jdk路径(如果默认路径是自己建立的路径,则不需更改) 第二个路径:jre路径(如果默认路

JavaWeb之问题集(1) - Tomcat启动闪退

1. 问题描述 环境: System:Windows 10 Professional JDK:1.8.0.212 Tomcat:9.0.22 原本可以正常的启动和关闭,后来突然的就无法使用了,无法启动,双击 startup.bat 命令行窗口一闪而过. 经查明,端口未被占用:环境变量 JDK 和 CATALINA_HOME 也都配置了. 2. 问题所在 突然想起来,前些日子因为要适配新项目,新添加了一个JDK 1.7,并且把环境变量中的JDK配置成了1.7. JDK 1.7是无法支持Tomcat