cocos2d-x经验杂谈
来源:互联网 发布:淘宝刷收藏有什么用 编辑:程序博客网 时间:2024/06/06 10:07
1、偶遇ReferenceTable overflow
出现场景:因为频繁对socket的往返数据通过JNIHelper进行了decryptDES和encryptDES操作,导致java的垃圾回收出现异常,引用计数溢出。
解决方案:进行jni操作后记得释放
参考文档:http://www.ibm.com/developerworks/cn/java/j-lo-jnileak/index.html?ca=drs-
if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) JniMethodInfo mInfo; bool hasMethod = JniHelper::getStaticMethodInfo(mInfo, ANDROID_HELPER_CLASS, "encryptDES", "([B)[B"); jbyte *by = (jbyte*)data; jbyteArray jbyteArr; //定义jbyte数组 jbyteArr = mInfo.env->NewByteArray(len); mInfo.env->SetByteArrayRegion(jbyteArr, 0, len, by); jobject ret; if (hasMethod) { ret = mInfo.env->CallStaticObjectMethod(mInfo.classID, mInfo.methodID, jbyteArr); jbyteArray array = (jbyteArray)ret; jsize numBytesEncrypted = mInfo.env->GetArrayLength(array); // const void* data = (const void*)mInfo.env->GetByteArrayElements(array, 0); jbyte * jdata = (jbyte*)mInfo.env->GetByteArrayElements(array, 0); if(jdata) { DataBlock* dataBlock = new DataBlock((const void*)jdata, (unsigned int)numBytesEncrypted); mInfo.env->ReleaseByteArrayElements(array, jdata, 0); //JNI释放 return dataBlock; } } #endif2、使用多线程,应避免在非主线程中使用autorelease,这是非线程安全的操作,可能出现空指针。如果一定要使用,建议用建立消息队列机制,在主线程使用
3、碰到cocosbuilder too many directories
出现场景:cocosbuilder加文件夹后无法打开,出现上述提示。那是因为cocosbuilder定义了kCCBMaxTrackedDirectories 50,也就是你的文件夹上限为50,超过了就会出现错误提示。
解决方案:改源码
参考文档:http://blog.csdn.net/playddt/article/details/11609679
下载路径:http://download.csdn.net/download/wangting/6926059(用别人下载好的快点,不用配置很多东西)
4、cocosbuilder尽可能不使用ccb插件,在多个ccb文件同时在一个类中容易引发各种让你痛苦的事情
5、scrollView中的CCControlButton在滚动过程容易点到
解决方案:修改CCControlButton.cpp,在ccTouchMoved里面加上简单的判断标记,用于阻止sendActionsForControlEvents,为了保证点击灵敏度,手指的小距离移动还是运行存在的。
if(ccpDistance(pTouch->getLocation(), pTouch->getStartLocation()) > MOVE_LIMIT) { mIsMove = true; }最后改下ccTouchEnded,把button的状态改成CCControlStateNormal即可
void CCControlButton::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){ m_isPushed = false; setHighlighted(false); if (mIsMove) { m_eState = <span style="font-family: Arial, Helvetica, sans-serif;">CCControlStateNormal</span>; mIsMove = false; return; } if (isTouchInside(pTouch)) { sendActionsForControlEvents(CCControlEventTouchUpInside); } else { sendActionsForControlEvents(CCControlEventTouchUpOutside); }}
6、某些action并没有修改到目标对象的透明度
出现场景:一个CCLayer使用CCFadeIn,无任何效果
解决方案:看了一下源码注释有这么一句Fades In an object that implements the CCRGBAProtocol protocol.
ps(原以为setOpacity能同时修改子节点,最后发现不行,只能重写setOpacity,通过递归遍历子节点)
- cocos2d-x经验杂谈
- cocos2d-x经验分享
- cocos2d-x或coco2d学习之杂谈
- cocos2d-x 编译 经验&& bug
- 经验杂谈
- 修改cocos2d-x提供build_native.sh经验
- 修改cocos2d-x提供build_native.sh经验
- Cocos2d-x 各种诡异问题经验记录
- cocos2d-x 移植android平台及适配问题杂谈
- 【Cocos\杂谈】Windows下Cocos2d-x 3.14环境搭建
- OO思想经验杂谈
- C#编程经验杂谈
- ACM 经验杂谈
- 编程经验杂谈
- 杂谈经验与未来
- Android经验杂谈归类
- 架构设计经验杂谈
- 你是否有游戏开发经验,学习Cocos2d-x多久?
- IOS中复制对象的用法及深拷贝和浅拷贝详解
- webservice的 Unrecognized xbean element mapping: services in namespace
- 使用Xcode修改iOS项目工程名和路径名
- 简要分析汽车工业现如今如此重要的原因
- 喜欢有点幸福到忧伤的旋律
- cocos2d-x经验杂谈
- 3DES算法
- DOMContentLoaded事件
- 在任意UIView上显示Badge
- linux内存操作----kernel 3.5.X copy_from_user()和copy_to_user()
- js判断undefined类型
- 项目6 配置与管理Apache服务器
- Android优秀开源项目
- Ubuntu上SVN命令的使用