本帖会定期更新技术群内的一些典型问题及讨论出来的解决方案。以及我在看各种文章的时候,收集的tips。
目前还很少,希望大家回帖补充。
Ps:这些tips虽说是我整理了,但是著作权神马的归原作者所有~
Tips
加入到场景的背景音乐会跟随场景一起释放掉。所以不要将背景音乐绑定到场景上。
Q:cocos2dx 中使用 SimpleAudioEngine 播放背景音乐时切换场景,背景音乐会停下来,怎么让背景音乐在切换场景后保持播放?
A:直接使用SimpleAudioEngine 播放背景音乐在切换场景之后音乐是不会停的;音乐停的原因是我无意间new了一个 CCComAudio 类,而 CCComAudio 会在每次切换场景时关掉背景音乐和音效;再具体一点的原因是我用了 CocoStudio 的 Scene Editor 导出的 json 文件创建了场景, CCNode *pNode = CCSSceneReader::sharedSceneReader()->createNodeWithSceneFile( “LoginScene.json” ); 而 createNodeWithSceneFile() 会创建 CCComAudio 类。解决方法之一是用 UI Editor 导出的 json 文件创建场景。
经过测试发现 由于mp3是高压缩的音乐格式,由于压缩率过高导致无法播放的问题,究其根本,是因为 cocos2dx的CocosDenshion 实际上是对windows android ios系统函数简单的封装,并没有使用专业的声音引擎,为了跨平台的考虑,一般使用 mp3 和 wav 格式,wav作为音效更为合适。
Q:unscheduler这方法好像没效果? @never install b
A:传入 scheduler 的参数不能写 bind(this)
内存不够了,可尝试清理下精灵帧、纹理缓存 @杭州-程序-稻田
how.clearTextures = function(){
if (how.MEMORYCONFIG_LOW == how.memoryConfig){
cc.spriteFrameCache.removeSpriteFrames(); //清除引用
cc.textureCache.removeAllTextures(); //删除所有纹理
}
}
经常来回使用的界面不用清除纹理缓存,用pageview的api @杭州-程序-稻田
Q:layer怎么覆盖它下层的layer的所有事件响应
A:代码
cc.eventManager.addListener(new cc.EventListener.create({
event: cc.EventListener.TOUCH_ONO_BY_ONE,
swallowTouches: true, //这个设置,就是响应此触摸并停止其他组件响应此次触摸
onTouchBegan: function(touch, event){
return true;
}
}), this);