2011/11/06~2011/12/24
不断调试c#改写成c++的behavior trees。由于c++没有内存管理机制,所以一旦搞错了delete的位置与对象的责任,就会导致奇怪的僵尸指针。
而由于tree本身也嵌套了不少层,所以要最简化tree才能调试出问题所在。花了整整一个月在调试与阅读c++内存管理相关的文章。终于还是严格简化了tree与代码,才调试出来问题所在。
同时也好好读了些状态机的例子,以防万一behavior trees无法调试成功选择。
NSBundle的官方文档也阅读了2遍。
2011/12/25~2012/01/10
由于behavior trees的parallel 节点需要并发运行子节点以完美模拟,而普通的linear sequence/selector节点是固定启动第一个设定的节点(所以万一可能有好几种都返回true的情况,它就总选择第一个返回true的情况)。就考虑是不是要用多线程完成,所以准备阅读官方的多线程部分。但官方推荐使用‘并发’的方法比直接写线程好,所以又阅读了官方的并发介绍与国内的一些经验总结。不断阅读中又了解了KVC与KVO。(在[Object-c基础编程2.0]的书中有一章介绍KVC的)。
考虑到游戏中有很多脚色,如果都大量用并发,会导致资源严重占用,所以简单脚色可以考虑用状态机,所以不用并发,而用随机调用的方法更好。
同时读了NSObject的一些方法,象forwardTargetForMessage,这更使我明白Object-c的动态性。所以behavior trees 可以用object-c实现,虽然没有模板功能,但是依靠动态性,完全可以自由的调用对象的方法,不需要模板,只是转换过来还要换换思路。
2012/01/12
问题:KVO不直接支持作为属性的NSSet,NSArray,Apple官方文档写的如果试图直接用AddObserver会Raise exception,必须要xxxx。参考了几篇文章,还不是很明白。貌似用CoreData会更方便。
参考:http://eschatologist.net/blog/?p=189
http://stackoverflow.com/questions/6403570/key-value-observing-an-nsmutableset
2012/02/02
1. 再此期间在阅读官方文档,Event handler,里面介绍了touch event , gesture recognizer , Motion Event, Core Motion。
2. 要良好使用xcode4,还是要记住一些常用方法,比如快速注释一块一行。
参考别人的经验 http://blog.csdn.net/gavinming/article/details/6197481
但是xcode里命令提示中的 f, c , t ...都代表了什么呢??比如f表示函数
虽然现在有强大的google,但是关键字用错了还是找不到我们的信息,就想说错了话别人不会刁我们一样。除非你正好使用关键字Code Sense,或者你把xcode help认真读了1~2个月。
3. 之前虽然读了cocurrent programming,但是一旦实际用上,还是有很多疑问的。
比如dispatch_queue_create,在官方文档里一段说道它可以创建serial queue。
可是后面一段又演示了使用dispatch_async与dispatch_syn在创建的queue上运行,让人误以为在上面可以并发运行。
那么dispatch_async与dispatch_sync到底有什么作用??
创建的queue真的只能非并发运行吗?
答: 自定义的queue只能FIFO运行加入到自己里面的tasks,sync与async函数的差异是在于是否提交task到queue后立即返回。
参考:
http://stackoverflow.com/questions/4607125/usage-of-dispatch-sync-in-grand-central-dispatch
http://www.fieryrobot.com/blog/2010/06/27/a-simple-job-queue-with-grand-central-dispatch/
http://www.cppblog.com/kesalin/archive/2011/08/26/dispatch_queue_block.html
http://stackoverflow.com/questions/4607125/usage-of-dispatch-sync-in-grand-central-dispatch
2012/02/12
1. 在官方Local and Push Notification Programming Guide的最后介绍了binary interace,sample里使用了htons,htonl函数不知道是干嘛的?
答:原因是主机在放大于一字节数据时在网络上传输要转换为网络格式,因为传送方与接受方可能是其他类型CPU,存放格式不同。
参考:
http://baike.baidu.com/view/567601.htm
http://baike.baidu.com/view/569197.htm
http://baike.baidu.com/view/569196.htm
http://www.diybl.com/course/3_program/c++/cppsl/200899/141291.html