SpriteBuilder复杂CCB在App场景加载时报错排查

简介:

Player.CCB由body和arm两部分组成,它们都开启物理使能.

在GameScene.ccb中新建一个物理对象,将Player.ccb拖入该对象.此时编译运行App均正常.

然后继续添加其他物理对象Wall.ccb组成屏幕边界,这时App运行发生错误,log为:

Collection <__NSArrayM: 0x78f97730> was mutated while being enumerated

发现源代码中断在场景的初始化方法中,该方法的功能是递归调用场景中每个子CCNode的didLoadFromCCB方法.

接下来删除Player对象,再添加Player对象,这时App运行又正常.多次测试发现,只有当最后一个对象是Player时程序才不出错.

但是不能到这里停止.假如游戏场景中要有2个Player对象真么办?总有一个不是最后一个对象.所以还得找原因.

因为异常发生在didLoadFromCCB的递归调用中,而Player只有arm子对象添加了该函数.遂将其注释掉,在添加多个Player的情况下App运行正常.

这时可以锁定是arm类Arm中的didLoadFromCCB方法里做了不应该的事.检查该方法,发现其间接使用了GameScene.ccb中的物理对象:

_phyWorld = (CCPhysicsNode*)self.parent.parent;
CCLOG(@"name is %@",_phyWorld.name);
//省去无关代码
for (int i = 0; i < MAX_BULLETS; i++) {
        bullet = [CCBReader load:@"Sprites/Bullet"];
        bullet.visible = NO;
        [_phyWorld addChild:bullet];
    }

注意,在GameScene.ccb子对象的枚举过程中修改了物理对象.只有Player放在物理对象的最后才不会出错.

知道了问题所在,简单的取消Arm中对物理对象的引用就可以了,将必要的逻辑放到GameScene类里去即可.

相关文章
|
4月前
|
域名解析 JSON 测试技术
常见移动端APP测试场景
常见移动端APP测试场景
|
5月前
|
JavaScript Java 测试技术
『App自动化测试之Appium基础篇』| 从定义、原理、环境搭建、安装问题排查等深入了解Appium
『App自动化测试之Appium基础篇』| 从定义、原理、环境搭建、安装问题排查等深入了解Appium
793 0
|
28天前
|
API UED
深入理解 uni-app 中的加载提示:uni.showLoading
深入理解 uni-app 中的加载提示:uni.showLoading
164 0
|
2月前
|
开发框架 前端开发 算法
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
39 0
|
3月前
Google Earth Engine APP(GEE)—— 一个简单的加载影像的UI(RGB,NDWI和NDVI)这里使用时间滑块进行时间选择
Google Earth Engine APP(GEE)—— 一个简单的加载影像的UI(RGB,NDWI和NDVI)这里使用时间滑块进行时间选择
34 0
|
3月前
|
Web App开发 传感器 Android开发
APP兼容性测试都需要考虑哪些场景?
APP兼容性测试都需要考虑哪些场景?
|
5月前
|
XML Java Android开发
Android App开发中使用Glide加载网络图片讲解及实战(附源码 简单易懂)
Android App开发中使用Glide加载网络图片讲解及实战(附源码 简单易懂)
94 0
|
5月前
|
XML Java Android开发
Android Studio App开发中异步任务AsynTask与异步服务IntentService的讲解与实战(实现四大名著的加载进度条 附源码)
Android Studio App开发中异步任务AsynTask与异步服务IntentService的讲解与实战(实现四大名著的加载进度条 附源码)
64 0
|
8月前
|
移动开发 安全 Shell
如何排查网站及APP数据遭到泄露的问题
近年来数据泄露安全事件频发,在今年的hw网络安全攻防演练中,获取敏感信息、数据泄露等漏洞的得分也越来越高,我们SINE安全近十年来成功的帮助了许多客户,查找到了数据泄露的原因,在这里向大家分享我们的经验与心得,包括数据泄露的排查办法以及修复。
90 0
|
9月前
|
JavaScript Windows
vue无法创建项目create-vite-app projectName,提示错误:create-vite-app : 无法加载文件
vue无法创建项目create-vite-app projectName,提示错误:create-vite-app : 无法加载文件
94 0