半年回顾(坑爹的一年实习期才过去一半)
一转眼间,从当时暑假 7月15号离开家里到现在所在的公司已经近半年了。从一开始的只会一点点C++的皮毛到现在虽然还是一个大菜鸟,但是相当刚离开学校那稚嫩的时候至少能看到了一些长足的进步。
现在从事的LUA,cocos2dx手游编程。说起来从一点都不会到现在的小有心得,不过还称不上上手,目前还处于写功能的阶段。苦于没有人领进门,靠着修BUG入门,自己看COCOS2D-X的源代码感觉有些吃力。找不到头绪的感觉,不知道从哪个文件先着手看。这也可能是因为C++基础太过薄弱的原因。请大大们指导下应该从哪里入手看更适合我这种初学者。后来觉得是自己的C++基础太过薄弱的原因,就自己从网上找了一些书来看,现在就在看C++ primer, 现在看的是第四版,因为第五版找不到中文版的,而且第四版的也有更详细的课后习题的解答,所以选择了第四版的。做为一个小白现在想学很多东西,cocos2d-x, windows编程,DX, 还想写好看的代码,听从一个好大哥的话去买了一本重构,但是一直没有开始看。但却不懂从哪里入手,所以都先扔在了一边,乖乖的在看primer。不过感觉学习的速度有些慢。
汗,写完两段发现在自己逻辑好零乱的感觉。
从这里开始写一些自己写LUA的体会。
lua最开始写的时候感觉很方便。不需要分号, 不需要声明, 随用随写。 self, table是万能的。相比C++来说那么一点语法基本称不上语法。当然,这也是因为我是小白的原因。lua的精通者勿喷。lua作为一种语言也有他的独到之处,像一些元方法,这些因为我很少用到,所以只是了解了皮毛。
(1)学习LUA最重要的是table类,在lua中几乎可以称为万能的。可以做为所有的类型。与元方法想配合,可以实现一个模拟的类。
(2)在lua中曾经掉过一个小坑,在文件1(a)中调用文件2的函数,设置了一个文件2(b)的setData函数后设置了一个b.data,然后调用文件2(b)的exit()函数清除数据,结果发现在我在文件2中,把self.data置为nil清除这个数据后,这个数据竟然还是存在。不明所以,后来才知道,self.data 和 b.data 是不等价的,self只是模拟出来的this指针。我清除的self.data根本就是不存在的。
a.file
function a:setBData(_d)
b:setData(_d)
end
----------------------------------------
b.file
function b:setData(_data)
self.data = _data
end
function b:exit()
self.data = nil
end
(3)不懂是不是我的代码写法有些问题,代码中充斥着各种全局变量。只要定义为self的变量都是全局的,必须手动去释放,在其它的文件也可以通过文件名.变量名(b.data)来读取。真心觉得这是lua的一个短板,缺少封装。
(4) 用了一段时间的cocos2d-x,发现了其中的几个BUG。 coco的版本是2.1.2好像。具体记不大清了。
首先是menu的BUG,在创建menu的时候设置menu的优先级会程序会爆掉。至于这个问题的彻底的解决办法不懂,只知道要在下一帧设置,不马上设置优先级就好了。不知道怎么修改底层。
原因是在创建menu的时候还没有注册他的handler时设置优先级调用了menu的handler,此时handler 为空,所以导致游戏爆端。
第二个是tableView的问题, tableview中的cell只要没有完全移出可视区域,哪怕只有一点点就不会被清除,cell就还能响应你的点击,比如说cell上的menu,虽然看不到,但只要点击了就会响应。
对于这个问题,目前还没有很好的解决办法,现在的针对性处理只是将上层的按钮优先级设的很高,但有时还是会出现点击被cell上的按钮吸收,以后上层按钮无响应的问题。如果大大们有什么更好的解决办法,请别客气,欢迎指导!嘿嘿。。。
好了,写到这里,我这小白肚子里的墨水吐的差不多了。能看到这里说明大大们也是有心了。(能把零乱的一篇文章看完,真心不容易。)在这里还是再啰嗦一下,如果各位对于小白我的学习有什么更好的建议的话或者对cocos2d-x的源代码有什么适合我这类初学者的阅读顺序(比如先看哪些文件呀),请不吝赐教。在这里先谢过了^_^