Cocos2d-x 10的CCUserDefault不能在android下保存内容

来源:互联网 发布:java中如何实现多线程 编辑:程序博客网 时间:2024/04/30 04:56

  今天真郁闷,花了大半天的时间才发现在CCUserDefault工具类在android平台下不能存内容,虽然它可以在win32平台下非常流畅的读写内容。但是,上了真机测试才发现没有实现保存文件!我换了三种写法来保存内容,甚至还把手机上的360卸载,怀疑是不是这个“老流氓”搞鬼,因为,上次开发“小鸭爆破”游戏时,我给游戏上广告SDK时,就吃过个“老流氓”的亏!它把广告SDK的广告下载给拦截掉了,弄得我很长时间才发现。

   其中,还发现itoa函数在linux下找不到,非常坑爹!只得自己参考C++ reference写了一个itoa转换函数--这个真是苦啊!我怀着多大希望学习C++编程,总想把C++当成Java来写才爽,但是,我发现cocos2d引擎对STL支持不好,让我写起来真的没有像Java那样的简捷、清爽~唉。。。什么时候cocos2d-x完全支持STL啊--那样就可以有Java一样编程的感觉了(2012-11-28)。

  其实,以上都是我开发中犯一个错误,真正的原因其实也不能算是我的错误,因为事先我并不知道android的linux平台对于静态对象的内存管理与windows不同:android的linux平台不会在cocos2d-x引擎结束时立即结束静态对象--因此,不会按照我的想像呼叫静态对象的析构函数,而我在析构函数中使用CCUserDefault来保存玩家的存档信息,因此,也就不会存档--真是TMD“坑爹”!因为,在windows平台下,一定会按照我的想像:引擎结束时会立即呼叫静态对象的析构函数,从而呼叫我的保存玩家的存档信息代码!原来是两个OS对于变量的内存不一样。这时我们才真正感觉到Java的跨平台开发,那才叫做和简单:windows下开发,Linux和Unix下肯定正常运行,我们Java程序员根本不有担心什么对象的内存管理问题,因为这一切都让虚拟机做好了,直到今天我又一次感觉到Java语言出现的必要性和人性化。做C++程序员,特别是做一个跨平台开发的C++程序员真是苦啊~~~因为,对于未来我要把游戏使用C++移植到iOS平台时还会出现神马情况,我现在很忐忑,也很期待--这就是真正的程序员--期待挑战,并发现原来经验中没有的状况,然后搞定它--这种感觉其实和真正的玩家玩游戏差不多--不用代练,不用花RMB,自己摸索体会游戏的乐趣!因为,现实生活中,写程序不能实现代练,更不可能花了钱就能学会!人生是自己的人生,这种游戏只能自己完成。

  以上结果直到2012-11-29零晨2点半我才把问题找到并且解决,有一种非常痛快的感觉!因此,今天特别使用博客来表达自己的感想。我觉得人生就是“游戏”,写游戏更是“游戏”中的人生。