cocos2dx3.2 场景切换 真机卡死

E_ver_Fe 2014-12-08 07:07:42
例如:scene1 scene2 scene3

scene1 ;

replacescene(scene2);

scenen2;

replacescene(scene3);

scene3;

replacescene(scene1);

如此循环 第一次没问题, 当第二轮scene1--->scene2 时会卡死;
scene2中的对象都已释放


且只在真机上卡死 电脑上没问题
...全文
774 21 打赏 收藏 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
E_ver_Fe 2014-12-15
  • 打赏
  • 举报
回复
CCSprite *spr_1 = CCSprite::create("HelloWorld.png");	
	arr = CCArray::create();arr->retain();
	arr1 = CCArray::create();arr1->retain();
	arr2 = CCArray::create();arr2->retain();
	arr->addObject(spr_1);
	arr1->addObject(spr_1);
	arr2->addObject(spr_1);
	CCLog("arr=%d",arr->getReferenceCount());
	CCLog("arr1=%d",arr1->getReferenceCount());
	CCLog("arr2=%d",arr2->getReferenceCount());
	CCLog("spr=%d",spr_1->getReferenceCount());
	CCLog("``````````````````");
	arr->release();arr1->release();arr2->release();
	CCLog("arr=%d",arr->getReferenceCount());
	CCLog("arr1=%d",arr1->getReferenceCount());
	CCLog("arr2=%d",arr2->getReferenceCount());
	CCLog("spr=%d",spr_1->getReferenceCount());
打印结果: arr=2 arr1=2 arr2=2 spr=4 `````````````````` arr=1 arr1=1 arr2=1 spr=4 真心无力了。。。。
E_ver_Fe 2014-12-15
  • 打赏
  • 举报
回复
再说明白点就是创建一个场景, 场景内有多种元素,把各种元素分别保存在不同的CCArray的同时 再定义一个CCArray * allarray 把所有的元素也都保存起来,然后遍历allarray 把所有的元素都添加到场景中 所以在程序中一共add了3次 分别是分类CCArray 、allarray、场景; 场景addchild()同时release()一次 最后游戏结束时 对所有的CCarray release()。。。。。
E_ver_Fe 2014-12-15
  • 打赏
  • 举报
回复
引用
结构体里的那些CCArray * arr1对象,你得先赋值了,才能使用,如:st.arr1 = CCArray::create();
我想说 程序中的代码是能执行通过的 而且运行结果没问题 所以。。所以那个CCArray::create()都加了的。。。 上面那个只是概述一下程序的代码流程和出现的问题。。。 只是在那三个重叠的CCArray中最大的那一个 release()没效果 或者执行异常啊。。。不是语法错误。。 我还是自己想办法去了。。
笨木头 2014-12-15
  • 打赏
  • 举报
回复
引用 20 楼 E_ver_Fe 的回复:
CCSprite *spr_1 = CCSprite::create("HelloWorld.png");	
	arr = CCArray::create();arr->retain();
	arr1 = CCArray::create();arr1->retain();
	arr2 = CCArray::create();arr2->retain();
	arr->addObject(spr_1);
	arr1->addObject(spr_1);
	arr2->addObject(spr_1);
	CCLog("arr=%d",arr->getReferenceCount());
	CCLog("arr1=%d",arr1->getReferenceCount());
	CCLog("arr2=%d",arr2->getReferenceCount());
	CCLog("spr=%d",spr_1->getReferenceCount());
	CCLog("``````````````````");
	arr->release();arr1->release();arr2->release();
	CCLog("arr=%d",arr->getReferenceCount());
	CCLog("arr1=%d",arr1->getReferenceCount());
	CCLog("arr2=%d",arr2->getReferenceCount());
	CCLog("spr=%d",spr_1->getReferenceCount());
打印结果: arr=2 arr1=2 arr2=2 spr=4 `````````````````` arr=1 arr1=1 arr2=1 spr=4 真心无力了。。。。
这种建议你再看一遍红孩儿那篇(或者到泰然网找一篇),你会找到答案的... 如果你已经看过的话... 这里的答案是“在游戏的下一帧才会释放这些对象,所以你在当前帧打印是看不出来的,它们都还没有被释放,所以精灵也不会被释放”。 原因在那些文章里可以找到,我就不长篇大论了~
笨木头 2014-12-12
  • 打赏
  • 举报
回复
引用 16 楼 E_ver_Fe 的回复:
Struct myst{ CCArray * arr1; CCArray * arr2; CCArray * arr3; } st; myst releaseArray(myst s){ s.arr1->release(); s.arr2->release(); s.arr3->release(); return s; } CCSprite * spr1 = CCSprite::create(); CCSprite * spr2 = CCSprite::create(); CCSprite * spr3 = CCSprite::create(); st.arr1->addobject(spr1); st.arr1->addobject(spr2); st.arr1->addobject(spr3); st.arr2->addobject(spr1); st.arr3->addobject(spr3); /////////////////////////////////////////退出时 cclog("%d",st.arr1.getreferencecount()); cclog("%d",st.arr2.getreferencecount()); cclog("%d",st.arr3.getreferencecount()); st = releaseArray(st); 如上所示:就是那么一个自定义的释放程序 如果单独新建一个工程去运行的话没问题,但是放在游戏中执行releaseArray就会报Expression: !_running异常; 而且只有arr1->release()报错. 而且游戏中执行releaseArray前的打印结果是: 1 1 1 执行前打印spr1/spr2/spr3的引用计数分别是 2 1 2 求大神帮忙想想可能是哪里出错了。。。 木头GG waiting for you !!!!!!!!!!!!!!
在你把Cocos2d-x基础看完之前,我拒绝继续回答~! 这是最后一次回答....结构体里的那些CCArray * arr1对象,你得先赋值了,才能使用,如:st.arr1 = CCArray::create(); 再问我这种问题,我就..我就引咎辞职~!
E_ver_Fe 2014-12-12
  • 打赏
  • 举报
回复
Struct myst{ CCArray * arr1; CCArray * arr2; CCArray * arr3; } st; myst releaseArray(myst s){ s.arr1->release(); s.arr2->release(); s.arr3->release(); return s; } CCSprite * spr1 = CCSprite::create(); CCSprite * spr2 = CCSprite::create(); CCSprite * spr3 = CCSprite::create(); st.arr1->addobject(spr1); st.arr1->addobject(spr2); st.arr1->addobject(spr3); st.arr2->addobject(spr1); st.arr3->addobject(spr3); /////////////////////////////////////////退出时 cclog("%d",st.arr1.getreferencecount()); cclog("%d",st.arr2.getreferencecount()); cclog("%d",st.arr3.getreferencecount()); st = releaseArray(st); 如上所示:就是那么一个自定义的释放程序 如果单独新建一个工程去运行的话没问题,但是放在游戏中执行releaseArray就会报Expression: !_running异常; 而且只有arr1->release()报错. 而且游戏中执行releaseArray前的打印结果是: 1 1 1 执行前打印spr1/spr2/spr3的引用计数分别是 2 1 2 求大神帮忙想想可能是哪里出错了。。。 木头GG waiting for you !!!!!!!!!!!!!!
E_ver_Fe 2014-12-11
  • 打赏
  • 举报
回复
木头GG replaceScene到下一场景后 会释放自动原场景的所有缓存吗(动画 UI 图片 等等 )包括头文件中定义的成员
E_ver_Fe 2014-12-11
  • 打赏
  • 举报
回复
木头GG replaceScene到下一场景后 会释放自动原场景的所有缓存吗(动画 UI 图片 等等 )包括头文件中定义的成员
E_ver_Fe 2014-12-11
  • 打赏
  • 举报
回复
木头GG replaceScene到下一场景后 会释放自动原场景的所有缓存吗(动画 UI 图片 等等 )包括头文件中定义的成员
笨木头 2014-12-11
  • 打赏
  • 举报
回复
引用 14 楼 E_ver_Fe 的回复:
ccarray * arr = ccarry::create();arr->retain(); for(intt i = 0;i<10;i++) { ccsprite * spr = ccsprite::create(""); arr->addobject(spr); } arr->release(); 这样所有的sprite都会释放吗?还是要重新遍历一次逐个释放?
会释放的... 如果你还有疑惑,请看看内存管理的文章,不然内存泄露的概率是大大的~ 浅层次的内存应用,可以看看我这篇:http://www.benmutou.com/archives/61 更深层次的可以到中文官网搜索一下,或者看红孩儿那篇,比较经典
E_ver_Fe 2014-12-11
  • 打赏
  • 举报
回复
ccarray * arr = ccarry::create();arr->retain(); for(intt i = 0;i<10;i++) { ccsprite * spr = ccsprite::create(""); arr->addobject(spr); } arr->release(); 这样所有的sprite都会释放吗?还是要重新遍历一次逐个释放?
E_ver_Fe 2014-12-11
  • 打赏
  • 举报
回复
cocosstudio 资源用什么去手动释放好了 CCTextureCache::sharedTextureCache()->removeAllTextures(); CCArmatureDataManager::purge(); CCAnimationCache::purgeSharedAnimationCache(); GUIReader::shareReader()->purgeGUIReader(); CCDirector::sharedDirector()->purgeCachedData(); 这些貌似都没效果
笨木头 2014-12-11
  • 打赏
  • 举报
回复
create的要看你有没有retain(包括主动的或者被动的,被动的一般不需要去管),你可以看看内存管理的文章,蛮多的,看几篇大概就知道了~
E_ver_Fe 2014-12-11
  • 打赏
  • 举报
回复
CCSpriteFrameCache::sharedSpriteFrameCache()->removeUnusedSpriteFrames(); CCTextureCache::sharedTextureCache()->removeAllTextures(); CCArmatureDataManager::purge(); CCAnimationCache::purgeSharedAnimationCache(); GUIReader::shareReader()->purgeGUIReader(); CCDirector::sharedDirector()->purgeCachedData(); 每次切换场景都会执行一次的但是看输出貌似只有第一句执行有效果 其他的没效果
E_ver_Fe 2014-12-11
  • 打赏
  • 举报
回复
create 的局部对象变量要手动释放吗,主要是ccsprite 和 ccarry
笨木头 2014-12-11
  • 打赏
  • 举报
回复
引用 8 楼 E_ver_Fe 的回复:
木头GG replaceScene到下一场景后 会释放自动原场景的所有缓存吗(动画 UI 图片 等等 )包括头文件中定义的成员
正常情况下会, 但也要看你用了什么对象,比如Cocostudio的某些对象要自己调用释放(不知道现在优化了没) 自己retain了没有release也会造成内存泄漏,诸如此类
笨木头 2014-12-10
  • 打赏
  • 举报
回复
引用 4 楼 E_ver_Fe 的回复:
可以的。。。

class  Armature : public cocos2d::Node, public cocos2d::BlendProtocol
明显没有继承关系吖,真的可以转么?我没试过... 我看的是3.0的版本,不知道是不是2.x版本有继承关系
E_ver_Fe 2014-12-10
  • 打赏
  • 举报
回复
可以的。。。
笨木头 2014-12-09
  • 打赏
  • 举报
回复
引用 2 楼 E_ver_Fe 的回复:
现在又出现了新问题。 init(){ Armature * player;//创建并初始化 ccsprite * sprite = (CCSprite*)player; this->addchile(sprite); } 就是在前面加载了一个cocos动画 当replaceScene()后 会发生访问冲突 在这里 /** Returns the Command type */ inline Type getType() const { return _type; } 但是注销掉/*this->addchile(sprite);*/ 就不会了
Armature 不能转成CCSprite吧?
E_ver_Fe 2014-12-09
  • 打赏
  • 举报
回复
现在又出现了新问题。 init(){ Armature * player;//创建并初始化 ccsprite * sprite = (CCSprite*)player; this->addchile(sprite); } 就是在前面加载了一个cocos动画 当replaceScene()后 会发生访问冲突 在这里 /** Returns the Command type */ inline Type getType() const { return _type; } 但是注销掉/*this->addchile(sprite);*/ 就不会了
加载更多回复(1)
内容概要:本文介绍了一个基于Java与Vue的中小银行信贷材料结构化审核与尽调要点抽取系统的设计与实现。系统通过OCR识别、版面解析、关键字段抽取、实体归一化、规则引擎和风险评分等技术,将非结构化的信贷材料(如营业执照、审计报告、银行流水、合同等)转化为可查询、可校验的结构化数据,实现材料自动分类、字段提取、完整性检查、跨文档一致性比对及风险线索识别。系统涵盖文件接入、文档识别、字段抽取、规则校验、风险评分与前端交互六大层次,提升了信贷审核效率、统一了审查标准、增强了风险预警能力,并建立了可追溯的数据资产体系。文中还提供了企业名称清洗、统一社会信用代码校验、金额抽取、材料完整性校验、名称相似度计算和风险评分等核心功能的模型描述与Java代码示例。; 适合人群:具备Java和Vue开发基础,从事金融科技、信贷系统开发或智能文档处理相关工作的研发人员,尤其是关注OCR、NLP与规则引擎在金融风控中应用的工程师和技术负责人。; 使用场景及目标:① 实现中小银行信贷材料的自动化结构化处理与智能审核;② 提升信贷审批效率,降低人工核验成本;③ 统一尽调标准,增强风险识别与预警能力;④ 构建可追溯、可审计的信贷数据资产,支持贷后管理与监管合规。; 阅读建议:此资源以实际项目为导向,结合业务需求与技术实现,建议开发者结合代码示例深入理解各模块设计逻辑,重点关注实体归一化、规则引擎配置与前后端协同机制,并可在类似场景中复用核心算法与架构设计。
鼎拨神器 4.02 软件描述 ====================== 一、软件简介 鼎拨神器是一款面向拨号场景的桌面工具软件,提供账号批量拨号、拨号状态管理、日志留痕等功能,适用于需要频繁切换拨号账号的使用场景。软件界面简洁、操作直观,账号配置与管理一体化,开箱即用。 二、核心功能 1. 账号拨号:支持多账号配置,账号与密码以"空格或 Tab 键"分隔,可从表格(一列账号、一列密码)直接复制粘贴导入,批量管理、快速切换。 2. 动态等待:拨号成功后支持 1-60 秒动态等待时长,可有效规避连续拨号过快导致的失败,提升拨号成功率。 3. 流量选项:内置流量模式选项(4.0 版本新增),按需选择,灵活适配不同拨号需求。 4. 日志留痕: - dial_log.xls:最近一次拨号记录; - dial_log_日期.txt:全部拨号记录,按天归档,方便追溯与统计。 5. 图标美化:4.02 版本窗口左上角与任务栏统一应用专属图标,界面更规范。 三、版本更新记录 - 版本 4.02:修复了一些已知问题,优化窗口图标显示。 四、目录结构说明 - 鼎拨神器.exe:主程序,双击启动。 - Launcher_ForExe.exe:拨号调度启动器。 - Program 文件夹:软件内部文件,请勿删除。 - Program\dial.exe:核心拨号组件。 - accounts.txt:账号密码配置文件(账号与密码间用一个空格或 Tab 键隔开)。如不慎删除,请以"accounts.txt"命名自建文件即可恢复使用。 - rz 文件夹:日志文件夹,自动生成拨号记录。 建议每次拨号时将最后一个账号设为自己固有的账号,避免前面所有账号拨号不成功。 详细条款请参阅软件包内《软件使用授权及免责声明》。
详情可查看下方数据集可视化效果。 【数据集概况】 · 检测类别(中文):[其他(Violence), 攀爬(climb)] · 训练集:2056 张 · 验证集:111 张 · 测试集:61 张 · 总计:2228 张 该数据集聚焦于高空作业场景中人员攀爬行为的精准识别,涵盖室内攀岩墙、户外梯子、屋顶维修、儿童游乐设施等多种真实环境。通过多角度、多光照条件下的图像采集,全面覆盖了不同高度、姿态和设备类型下的攀爬活动,为安全监控与风险预警系统提供了高质量的视觉基础,具有显著的行业应用价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 87 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9141** mAP50-95 | 0.6503 Precision | 0.8867 Recall | 0.8620 train/box_loss | 0.8021 train/cls_loss | 0.4599 val/box_loss | 1.1432 val/cls_loss | 0.6798 【训练过程分析】 87 轮训练后 mAP50 达到 0.9141,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。但 mAP50-95 为 0.6503,和 mAP50 差距 0.26,定位精度仍有优化空间。 【模型性能评估】 Precision 0.8867、Recall 0.8620,精度高于召回,存在一定漏检。多类检测中,不同类别性能可能有差异,需关注难例类别的表现。 【预测效果展示】 验证集预测效果较好...

8,324

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧