cocos2dxjsb及Cocosbuilder使用相关问题处理记录

============================

CCBReader在iphone真机上无法读取的问题:(coco2dx版本 2.1.1)

打开项目 extensions/CCBReader/CCBReader.cpp line 518行左右

将 memcpy(&f, pF, sizeof(float)); this->mCurrentByte += 4;

改为: memcpy((void*) &f, (const void*) pF, sizeof(float)); this->mCurrentByte += sizeof(float);

原因由于ARM的编译器导致: 详见: https://github.com/cocos2d/cocos2d-x/pull/1967/files

============================================================

jsb: cc.CallFunc.create 回调时常导致程序clash的问题:

1: 尽可能不要使用cc.CallFunc.create(callback,target,data)中的第三个data参数, 改而通过callback使用匿名函数直接使用变量;

具体原因并未查明,但改进结构后,ios版本下游戏测试半小时以上未出现clash;

安卓下消除算法迭代7w次,时间20分钟左右,手机很热,但已未出现闪退,游戏大部分顺畅,GC时会小卡;

=============================================================

javascript binding中的movetoAction问题:当两个元素互换位置后再换回(三消中的宝石无效替换),如下代码

var pos1 = sA.getPosition();  var pos2 = sB.getPosition();

var move1 = cc.MoveTo.create(0.1, pos2);  var move2 = cc.MoveTo.create(0.1, pos1);

sA.runAction(cc.Sequence.create(move1, move2));

sB.runAction(cc.Sequence.create(move2,move1));

将出现A元素到达B点后,瞬移回A点, B元素正常的情况;

原因未查明;可在序列动作中间增加一个Delay,则动画逻辑正常; 

===============================================================

输出到ios5.0的机子上,原本在ios6.0的竖屏变成了横屏:

RootViewController中, return UIInterfaceOrientationMaskPortait; 这个是ios6的用法;

要支持ios5: 在 shouldAutorotateToInterfaceOrientation函数中 return UIInterfaceOrientationIsPortrait(interfaceOrientation);

另xcode中两个概念:

Project:mac上工程的配置选项; Targets:目标机子配置的选项;

项目发布时:Project->Build Setting中有一项: iOS Deplyment Target  iOS x.0

如果选择6.0,那么再接入5.0的机子时,是不会被项目识别到的,修改成5.0

修改后Targets的 Summary deployment Target会自动被修改成5.0

 ===============================================================

jsb动画切换:

暂停某个动作可以通过:cc.getActionByTag和stopActiopByTag来控制;

请在确定动作执行完成之后,再添加相同动作;(或者将进行中动作直接回到原点)

========================================

jsb中:RepeatForever的动画,stopByTag后,run新的RepeatForever无效;

action1 = repeat() ;  action2 = repeat()

a.runAction(action1);a.runAction(cc.Sequence.create(callfunc(remove(action1)), action2) 此流程无效

解决方案参考 jsb ActionTest的 ActionRepeatForever 约1256行 (action2需放在回调中定义后执行,不然会报invalid_native_object)

========================================

发现repeatforever放在ccSpwan中,也不起作用;(貌似:spwan和sequence中出现repeat都会出现repeat动作无法运行)

========================================

sprite.setcolor(cc.c3b()) 和 tint 无法产生纯白色,他们是颜色混合器;

========================================

设置Sprite长宽的方法目前比较好的只有setScale(aX/bX); 等比例缩放,效果较好;

========================================

在过程中创建动画出现奇怪的现象,动画尽量在cache中创建;

========================================

在cocosbuilder中修改界面保存后,进入游戏,点击事件失效: 通过比对前后ccb文件变化,发现是cocos2dx2.1.1与cocosbuilder3对事件的命名不同造成:

cocosbuilder中保存为  touchEnabled, accelerometerEnable, keyboardEnabled,mouseEnable;

而cocos2dx2.1.1中识别为 isTouchEnabled,isAccelerometerEnabed, isKeyboardEnabled, isMouseEnable;

解决方法:修改 libs/extensions/CCBReader/CCLayerLoader.cpp 将四个常量重定义为没有is开头的;

========================================

cocosbuilder中添加png图像后,published时程序crash, 重新更换图片后正常;

========================================

cocosbuilder中修改精灵位移不生效,原因是改在某段动画上了

========================================

音乐循环播放需在playMusic()第二可选参数加true;

========================================

 在制作粒子效果跟随移动中的精灵时,如果例子直接使用精灵的运动动画,则出错;单独定义一个相同的动画给粒子移动使用,没有问题;

========================================

a.runAction(Sequenct) Sequnce中删除a元素后,不要再接动作;

========================================

误以为动画出错没有播放,其实是被图层遮挡了;

========================================

新建ccb文件:设置控制器名变量,添加起始动画Intro,设置自动播放,添加.js文件(貌似不添加独立的js文件会黑屏)

========================================

根目录下的.js文件移到文件夹后无法被require,require的机制有待研究 

========================================

 字体文件设置resources-auto目录,builder将闪退,文件跟目录下放低清字体,resources-iphonehd目录放高清资源

========================================

cocosBuider打包压缩图使用pvr或者pvr.ccz会导致某些透明部分颜色消失,可采用png进行打包;

========================================

原文地址:https://www.cnblogs.com/sslin/p/3006432.html