cocos2d-x学习笔记(持续更新)

接受触屏事件的优先级是值越小,响应触屏事件的优先级越高


Z值越大,越外面


粒子系统设计工具Particle Designer软件  目前只支持MAC平台 导出 plist文件

地图设计工具Tiles 目前有两个版本,一个是Java版本,另一个是QT版本  导出TMX格式文件

图片编缉工具,将多个精灵整合成一个大图:  导出plist文件

Zwoptex 两个版本,一个是flash已不再维护,另一个是Mac版本,收费软件

TexturePacker:拥有Zwoptex 90%的功能,免费版中会自动向导出的图片中加入红色


JNI:允许Java代码与其它语言写的代码进行交互


cocos2d-x好像对tmx中使用bmp图片不支持


BombMan.win32.exe 中的 0x10007f50 (libcocos2d.dll) 处最可能的异常: 0xC0000005: 写入位置 0x0000000c 时发生访问冲突

BombMan.win32.exe(托管(v4.0.30319)): 已加载“C:\windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_zh-Hans_b77a5c561934e089\mscorlib.resources.dll

在 System.AccessViolationException 中第一次偶然出现的“未知模块”类型的异常

System.AccessViolationException”类型的未经处理的异常出现在 未知模块 中。

这里报错,是因为我的 monster 对象中,animation对象未能取出成功。所以才会发生访问冲突。其实就是一个nullpoint错误~


绘制游戏地图时应注意的问题:

1.Tiled编缉器支持同一个块层使用多个图块纹理,但cocos2d-x中的CCTMXTiledMap类仅支持一个块层对应一个纹理。所以我们需要尽量将图块纹理分类和合并,在每个块层上仅使用一个纹理图来绘制。

2.CCTMXTiledMap不允许任何一层(CCTMXLayer)中没有任何元素,否则解析TMX时会报错。

3.关于是否要将图块导出成外部图块,这一点需要看游戏本身的需求。由于Tiles不支持加密,外部图块的数据会被他人看到,所以对于正式发布的游戏,不建议将影响游戏平衡性的数值配置在外部图块中 


不要在项目名中使用空格,虽然Xcode对是否有空格不产生影响,但是当你使用其它工具时,带空格的项目名可能会引起不必要的麻烦,所以“不在项目名中使用空格”其实是为了规避潜在风险而采用的手段。在文件命名中,只有数字,减号和下划线是永远不会出错的


Libs:第三方库文件


找个时间将cocos2d-x目录解释下


Cocos2d-x中我们生成对象,一般都会自动设置其为自动释放对象。而这里就有个问题。如果我们在上一帧生成了此对象,在下一帧想访问它时,发现会出现错误,因为目标对象不存在了,已经被自动释放。解决办法是什么呢?(不包括数组)

1.将目标对象显示的添加为子节点,即addChild 使其成为子节点,所以cocos2d会保留它。但之前的对象还是没有保留,我们可通过GetChild来访问它。不保留一个内存被其它类或对象管理的对象称为“弱引用”。

2.显示的调用目标对象->retain()操作,如果目标对象没有显示的添加为子节点,都应对应其->release()操作,来释放对象。

3.通过AddChild成为子节点的对象,cocos2d-x会周期性检测对象有没有被使用,不再使用的对象会执行->release()操作。

4.Cocos2d-x周期性检查所有对象,对没有实例的对象进行释放操作。实现内存管理

还有一种,不需要添加为子节点且不需要显示调用->retain()就可以实现内存管理的方法:就是将CCNode对象添加到集合中,典型的就是CCArray,CCArray会对每个被添加进来的对象进行->retain()处理,对每个被删除的对象进行->release()处理


Assert断言

CCAssert跟cocos2d for iphone里的NSAssert的作用相似,使用断言可以创建更稳定,品质更好且不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话,可以使用断言。单元测试必须使用断言。

除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。


游戏开发者关注CPU和图形芯片的同时,更需要关注设备的RAM。

不要将RAM和闪存搞混淆,闪存是存储MP3,视频,应用程序和图像的地方。闪存就像计算机中的硬盘。RAM是内存,是程序运行时,存储代码,数据和图像的地方


每个设备都会存在“内存警告阈值”,一但我们程序使用的内存超过这个阈值,会被警告,甚至可能被操作系统强制关闭

Cocos2d-x和cocos2d-iphone都可以调用Director中的方法purgeCachedData()方法来帮助释放一些内存

当遇到程序崩溃时,建议重启设备,因为重启设备可以释放一些内存。应用程序发生突然退出的最主要原因就是内存耗尽。


IOS模拟器缺点:

1.不能评估性能:在IOS模拟器上运行的游戏,性能完全依赖计算机的CPU,渲染过程甚至没有使用MAC图形芯片的硬件加速功能

2.不能评估内存使用量:IOS模拟器可以使用计算机配置的所有内存,所以不会接收到内存报警

3.无法使用IOS设备的所有功能:比如设备转向,像多点触碰,加速计,振动,位置信息的获取

4.运行时表现可能不一样:可能在IOS模拟器运行良好的游戏,在真机上运行可能变得很慢甚至运行不起来


Xcode默认有两种构建方式:DEBUG和RELEASE.

建议打印日志都用CCLOG,因为CCLOG只在调试构建中才被编绎,在发布构建时会被删除。

这也是影响游戏性能的主要原因之一。


找个时间看下cocos2d-x/files/includes/目录下的ccConfig.h,ccEventType,ccMacros.h三个目录下的静态值及宏命令


场景图必段以CCScene对像作为根节点,对其它场景/层/节点结构不做强制要求,所以可以使用CCNode代替CCLayer类来创建“层”。事实上在我们创建层时一般会选择CCNode,而不是CCLayer类。CCLayer类封装了接收键盘和鼠标及加速计输入,所以多数情况会增另不必要的开销,除去处理输入的代码,CCLayer就是一个CCNode类。所以,在不需要处理输入的层中,会使用CCNode代替CCLayer节省不必要的开销


子节点的位置相对于父节点,且继承了父节点的特定属性(scale和 rotation)


anchor point 究竟是怎么回事? 之所以造成不容易理解的是因为我们平时看待一个图片是 以图片的中心点 这一个维度来决定图片的位置的。而在cocos2d中决定一个 图片的位置是由两个维度 一个是 position 也就是图片的中心点 另外一个是anchor point。只要我们搞清楚他们的关系,自然就迎刃而解。

他们的关系是这样的: 

actualPosition.x = position.x + width*(0.5 - anchor_point.x); acturalPosition.y = position.y + height*(0.5 - anchor_point.y)

actualPosition 是sprite实际上在屏幕显示的位置, poistion是 程序设置的, achor_point也是程序设置的。



对于不绘制的父节点,那么子节点标签将相对视图(视图相对于父节点)的左下角放置。对于绘制的父节点,子节点标签将会以父节点纹理的左下角为原点(左下角为中心)显示


每一个节点Node只能有一个scheduleUpdate()方法,这个方法不能被unschedule:中断,只被unscheduleAllSelectors中断


Cocos2d-iphone中的_cmd命令,对应cocos2d-x中的什么命令


CCLayerColor可以用来做场景切换时的淡入淡出

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值