http://blog.csdn.net/grimraider/article/details/7762415


环境:windows7, VS2010, cocos2d-1.0.1-x-0.12.0, cygwin, eclipse, android sdk4.0.3, ndk r7b

在vs上开发,然后移植到android上.


20120718

CCArray的foreach操作:

cocos2d-x 本地通知调用的问题CCNotificationCenter
在注册的postNotification消息函数中,不能再调用addObserver,可能会引发存储CCNotificationObserver对象的CCArray扩容,导致CCArray重新new了一块内存地址,CCArray首指针改变,当执行完返回postNotification函数的时候和原来的CCArray首指针不一致,导致内存读取出错。

[cpp] view plain copy
  1. observer->performSelector
就是注册的消息回调函数。该函数内不能对再添加或减少自定义消息。


[cpp] view plain copy
  1. voidCCNotificationCenter::postNotification(constchar*name,CCObject*object)
  2. {
  3. CCObject*obj=NULL;
  4. CCARRAY_FOREACH(m_observers,obj)
  5. {
  6. CCNotificationObserver*observer=(CCNotificationObserver*)obj;
  7. if(!observer)
  8. continue;
  9. if(!strcmp(name,observer->getName()))
  10. observer->performSelector(object);
  11. }
  12. }


20120719

强制类型转换:

自定义类MainScene继承自CCLayer,使用手法同HelloWorld,MainScene::scene()直接new了一个scene对象,并将MainScene的对象挂到scene下。

但是后来调用的时候产生错误操作:MainScene* pScene = (MainScene*)(pDirector->getRunningScene());scene被强制转换成CCLayer,对所谓的MainScene对象成员操作,导致内存块异常,现象就是在莫名其妙的地方挂掉,每次都不同,内存块检测也报过异常。

危险的强制内存转换,切记切记!


20120723

最好不要写出全局变量初始化顺序有依赖关系的代码。

[java] view plain copy
  1. constCCSizeWIN_SIZE=CCDirector::sharedDirector()->getWinSize();

一开始在VS上调试没事,移植到Android上,初始化的时候就挂了。

查了一下资料,原因是初始化顺序的问题。(具体初始化的顺序没搞清楚,⊙﹏⊙b汗,欢迎补充,感激不尽)

PS:找到了几篇初始化静态常量顺序的文章

1.控制全局变量初始化顺序 && #pragma详解

2.全局变量初始化顺序

[cpp] view plain copy
  1. intget_a()
  2. {
  3. staticinta=5;
  4. returna;
  5. }
  6. intget_b()
  7. {
  8. staticintb=get_a();
  9. returnb;
  10. }

3.JAVA中初始化顺序复习

4.初始化有序常量的一点小技巧


20120726

playEffect

音效播放前要先preloadEffect,否则第一次播放音效没有声音。可以一次preloadEffect所有音效,android那边调用的是HashMap存储音效存放路径。

vs端不写preloadEffect也能正常播放,但是android端必须先preloadEffect才能正常播放,否则第一次播放没有声音。背景音乐没发现这个问题。



20120803

CCTargetedTouchDelegate 的继承 和 dynamic_cast

想写个可以响应touch的sprite

类定义成了这个样子:

[cpp] view plain copy
  1. classGemBoard:publicCCSprite,CCTargetedTouchDelegate

然后注册touch消息的时候

[cpp] view plain copy
  1. CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,0,true);

在这挂了,查了一下午,挂在了

-addTargetedDelegate

-CCTargetedTouchHandler::handlerWithDelegate

-initWithDelegate

-CCTouchHandler::initWithDelegate

-dynamic_cast<CCObject*>(pDelegate)->retain();

-void CCObject::retain(void)

跟到这里,编译器告诉我CCObject的this指针是0,我晕呀。感觉太诡异了。

原因:CCTargetedTouchDelegate在上面的写法中是私有继承,而根据dynamic_cast的作用:(运算符可以在执行期决定真正的类型。如果downcast是安全的(也就说,如果基类指针或者引用确实指向一个派生类对象)这个运算符会传回适当转型过的指针。如果downcast不安全,这个运算符会传回空指针(也就是说,基类指针或者引用没有指向一个派生类对象)。)上面的情况就合情合理了。

今天学到了2个知识点:

1.class B: public A, C 这种情况下A是public继承,C是private继承;class B: A这个A也是private继承

2.dynamic_cast 除了public 的其他都返回null

所以改成

[cpp] view plain copy
  1. classGemBoard:publicCCSprite,publicCCTargetedTouchDelegate

就正确了。发现自己的c++基础真烂。



20121101

今天不是万圣节吗,怎么变成了愚人节!!!

因为做的项目是VC++下开发,然后编成本地代码在Android上运行,所以有些地方需要上真机打印log调试。我日哦,我在代码里加了N多的log代码,就是一句也不打出来,在log上纠结了一天,一开始以为是cocos2d的代码出问题了,难道是自动屏蔽了log输出?上网查资料,当然什么也找不到。我就在加log代码,然后上真机,看不到log,然后继续加log代码,往复循环。下班的时候,同事看我这么纠结,就问我,vc上打断点看程序运行到log代码处了吗?结果是程序正常运行,断点根本不走,靠!原来我一直在一段废代码上加log!我的生命呀,就这样浪费了。我想起了一首神曲,有兴趣的同学可以听一下:Wrong hole - DJ Lubel



20121103

CCTexture2D::initWithData

bool CCTexture2D::initWithData(const void *data, CCTexture2DPixelFormat pixelFormat, unsigned int pixelsWide, unsigned int pixelsHigh,const CCSize& contentSize)

使用数据创建纹理,我试了无数遍,各种问题都考虑了,就是不知道为啥正常创建出来的纹理显示不出来。最后发现是contentSize这个最后的参数,我给的是(0,0)当然创建不出来了,一开始还以为是CCTexture2D创建成功后返回给我的生成的纹理大小。事实证明是我想多了……这个参数就是一开始指定要创建纹理的大小的

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Android(安卓)- 代码片段
  3. Kotlin学习路(五):变量延迟初始化
  4. 【Android】Toast大全
  5. [置顶] Eclipse,到了说再见的时候了——Android(安卓)Studio最全
  6. Android(安卓)File.listFiles()返回null问题
  7. http上传文件到网络核心代码
  8. fanfou(饭否) android客户端 代码学习2
  9. android 设置Spinner文字标题颜色 字体大小样式

随机推荐

  1. 关于Android Studio 模拟器“ANDROID SDK
  2. android基本知识
  3. Android(安卓)Dalvik ART
  4. 框架模式MVC与MVP在Android中的应用
  5. MeeGo已死 Intel全面转向Android阵营
  6. Android Studio 常用快捷键
  7. android中加载大图片到内存
  8. Android中activity的启动模式详解
  9. 谷歌Android被Linux内核除名
  10. Android特色开发——基于位置的服务