http://blog.csdn.net/we000636/article/details/8263503
被#ifdef DEBUG #endif包含的代码将不会出现在release构建版本中,中能在调试版中看见
睡眠刚体:它是一种允许物理模拟不需要处理而快速跳过对象的技巧。当施加在一个动态刚体的力量小于临界值一段时间后,该刚体进入睡眠状态。换句话说,如果动态刚体处于缓慢或几乎不移动和旋转状态时,物理引擎将其标记为睡眠状态,并且不再对其施加力量,直到有一个能够使刚体移动或旋转的推动力出现为止。如果游戏中并非所有刚体都在运动,那么应该设置allowBodiesToSleep为True,来激活此特性
在BOX2D中,一般32像素代表一米,尽可能将Box2D世界的对象尺寸控制在一米左右。但并不意味不可以创建小于0.1米,或大于10米的对象
Box2D世界是通过定期调用Step方法来实现动画的。它需要三个参数。第一个是timeStep,用于告诉Box2D自上一次操作过去的时间,它直接影响刚体在这一步将要移动的距离,建议采用固定时间。第二个第三个是迭代次数,分别为速度迭代次数,位置迭代次数。对于位置迭代次数一般一次就足够了,因为游戏一般不需要更精确的位置。速度的迭代次数更加重要,一个比较好的迭代次数是8,在游戏中,超过10的迭代次数效果不明显,但1~4次迭代次数无法得到稳定的模拟结果
PhysicsEditor:依靠这个工具,只须画出一个顶点就可以创建碰撞多边形
在Box2D物理引擎中定义碰撞多边形时,需要遵循两条规则:
1. 逆时针定义各个顶点
2. 多边形必须是凸多边形
记住,在节点的Draw方法中,所有OpenGlES代码都在Z-order为0的情况绘制图像,如果希望OpenGL ES绘制的图像覆盖其它节点,那么那些节点的z-order需要设置为负值
当任何连接着关节的刚体被销毁时,关节会自动销毁
cocos2d-x中类似于cocos2d的performselector:withObject:afterDelay的方法:(通知)
答:你问的这个是基于Objective-C特性做出来的一种功能,在iOS SDK中提供的,一般来说在cocos2d中不建议使用这玩意,使用schedule或action来做会好点。因为语言支持度的关系 objective-c是属于讯息传递的语言,也就是说要在不同的类之间传递讯息非常容易但C++中要达到相同的功能是非常复杂的一件事 语言天生的支持度就不够。使用schedule要求无参数方法 需求参数传递用action
原代码
[s1 isKindOfClass:[DestHole class]]
修改的代码
bool s1IsDestHole = dynamic_cast
SetBullet方法使得我们可以对高速移动物体进行特殊的连续的碰撞检测,将两次碰撞检测之间物体移动的距离纳入计算范围,因而,***模式可以检测到可能被其它方法忽视的碰撞,代价是损失性能
Game Center是苹果公司的社交网络解决方案。它可以验证玩家,存储玩家得分,显示排行榜,统计并显示玩家的成就。另外,玩家可以邀请朋友来进行游戏,或者与其他玩家进行快速游戏
Game Center只能在IOS4.1以及以上版本的设备中使用,验证用户的设备是否支持Game Center方法,在设备上查找Game Center应用程序,如果存在就可以使用,反之则不可以
Game Center的编程特性需要Game Kit API支持。Game Kit提供了编程访问存储在Game Center服务器上的数据的方法。Game Kit还可以显示内置的排行版,成就以及联机页面。它还提供了Game Center没有特性,例如基于蓝牙的点对点网络和语音对话
Prefix.pch是预编绎文件,它包含来自外部框架的头文件以便提高项目的编绎速度,当然,在当前的项目中,每一个添加到预编绎头文件中的头文件会使它自己的定义对于当前项目中的每一个源代码文件都有效。预编绎头文件名称总是以项目的名称打头
cocos2d-x 2.0 提供一个极有价值的新特征: setDesignResolutionSize() 。
这个函数用于指定一个 OpenGL 视图,然后将这个视图映射到设备屏幕上。根据不同的设定,视图会自动缩放显示内容,为 cocos2d-x 自适应多种分辨率提供了基本支持。
CCSize getWinSize |
( |
void |
) |
returns the size of the OpenGL view in points.
CCSize getWinSizeInPixels |
( |
void |
) |
returns the size of the OpenGL view in pixels.
setDesignResolutionSize() 设置虚拟分辨率后,会指定一个全局的缩放比例,所有的图片即便是 scale = 100%,也会自动缩放
SetFrameSize在Main文件中的意义是存在于Win32程序的
在手机中,手机有屏幕大小(手机分辨率),SetFrameSize相当于模拟手机屏幕
CCMenu里面的CCMenuItem的位置是可以设置,不是一成不变的水平对齐和垂直对齐
CCSprite里的透明度设置setOpacity(S),S值限为0-255,0为完全透明
CCLabelTTF里的SetDimensions(const CCSize s)这是设置文本的显示区域(而不是设置其在几行几列中显示),显示区域相对于屏幕,用于创建CCLabelTTF的字符串中的空格会自动当成换行。
addTargetedDelegate(CCTouchDelegate *pDelegate, int nPriority, bool bSwallowsTouches),bSwallowsTouches为true,则表示消耗掉此触屏消息,后面需要接收触屏消息的对象就接收不到触屏消息了。
假如A对象设bSwallowsTouches为true,且ccTouchBegan中返回True,表示此触摸信息已被处理,且会被A对象的ccTouchMoved,ccTouchEnded处理,但此触摸信息不会再被其它注册过响应的类接收。如果返回false表示此信息未被处理,表示此触摸信息未被消耗,将交其至其它注册过响应的类接收。
假如A对象设bSwallowsTouches为false,则ccTouchBegan中的返回值True或False只关系到是否需要被A对象的ccTouchMoved,ccTouchEnded处理,无论是True或False,此触摸信息都不会被消耗掉,将交由其它注册过响应的类接收
setRotation(angle) 其中angle为角度不是弧度。正数为顺时针旋转,负数为逆时针旋转
setSkewX(s); // 原图片坐标X轴倾斜
setSkewY(s); // 原图片坐标Y轴倾斜
X轴向右为正,Y轴向上为正。
setFlipX(bFlip); // 水平翻转 就像镜子一样反转,本来一个标志水平向左反转后向右
setFlipY(bFlip); // 竖直翻转 上下反转
bFlip为true,则图片翻转,false不翻转。注意,翻转是针对原图片的操作,水平翻转相当于在图片编辑软件里水平翻转一样。不根据锚点进行翻转。翻转以后,设置的以前设置的锚点不会随着图片的翻转而改变。比如设置右下角为锚点,则翻转以后,锚点为翻转后的图片的右下角(是不是有点绕?)
Cocos2d-x中的角度:
0 代表(1,0)
90代表(0,1)
180代表(-1,0)
ccpAngle返回角度限定在0~180中,木有负值,只返回两个向量间的弧度
Cocos2d-x中,setScaleX是以X方向为轴,沿Y轴方向进行缩放,setScaleY反之
未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
在使用的过程中,出现了标题中的错误,首先在网上搜了一些方法,费了好大的劲,终于解决了,
关于0xC0000005问题:
0xC0000005: Access Violation错误调试- -
1》数据越界或是定义的指针未释放.
2》空的指针的可能性最大。使用指针前最好能显式的赋值!
应该是指针的问题
3》内存访问错误,检查指针,是否为空,是否越界等
可能性 3 种
1:
char *p;
p = new char[number];
delete [] p;
....
// always using p....
p = xxx; // access violation
2:
char *p;
memcpy(p, xxx, number); // access violation
3:
char *p;
p = new char[number];
delete [] p;
.........
delete [] p; // access violation
Invalid Address specified to RtlFreeHeap - How to Solve
If you have faced the "Invalid Address specified to RtlFreeHeap" problem then there is a high chance you have a mix of debug and release dlls and exe's in your application.
Flash动画中,只有以图形元件为目标的动画才能导出PNG序例来,否则如果是影片元件为目标,导出PNG序列将只有一帧
CCRenderTexture
自己的理解
CCRenderTexture类似一张空白的“画布“,用户通过自定义笔刷 (CCSprite*),在touch事件中把笔刷的移动痕迹“记录”起来,从而“画”出各种艺术效果。记录方法很简单,首先 CCRenderTexture调用自己的begin()函数,开启“记录”功能,然后调用笔刷->visit()把自己”画“在这张画布上,最后 CCRenderTexture调用end()结束记录,那就OK了。
这里我想CCRenderTexture是通过把笔刷的纹理叠加到自己的纹理(Texture)里,而不是不断创建新纹理,所以消耗比较低,即使画得很频繁,帧数也能保持稳定,是个很赞的类。
CCRenderTexture由于只要begin()开启“记录”功能后,任何之后的CCNode*对象只要调用了visit(),就能将自己“画”在其身上。所以,一般游戏的截屏功能,完全可以使用CCRenderTexture的来实现,具体可以看tests里例子,cocos2d-x已经提供了相关例子,看看源代码就能搞明白的。(注意不要Copy源代码,源代码中将其addChild时设置Zorder为-1,这将置其于所有物体的底下,假如父节点还有其它孩子,将可能看不到效果)
CCRenderTexture * create (int w, int h)初始化,参数初始化画布的大小,画布坐标系用的是GL坐标系,左下顶点为(0,0)
笔刷,设置好位置,visit()时,其位置是相对于画布的(即相当于笔刷的父节点是画布)。
例如设置笔刷的位置为(400,500),它的位置是相对于画布的左下顶点(0,0)横移400,上移500.
CCRenderTexture还提供了一个清理画布渲染的方法
clear (float r, float g, float b, float a)清理画布并设置画布的颜色和透明值
m_pTarget->clean(0,0,0,0)将清理画布,并设其为完全透明的
CCLabelAtlas就可以从png图中读取文字。
CCLabelAtlas* diceCount=CCLabelAtlas::labelWithString("1:", "nums_font.png", 14, 21, '0');
第一个参数:显示的内容:1x,你也许会奇怪为什么是1x,因为使用的png图必须是连续的,因为程序内部是议连续的scall码识别的。9的后一位的”:“,所以先实现x就得用”:“代替。
第二个参数:图片的名字
第三个参数:每一个数字的宽
第四个参数:每一个数字的高
每五个数字:开始字符
其工作原理个人认为是根据ACSII工作,给出第一个字符,程序自动得到其ASCII码,然后再依次得到需要显示的字符串中每个字符的ASCII码并计算其位置,所以字体图片中的字符必须按ACSII码排列,不然得不到想要的字符串.在ASCII中9后面就是:,所以要显示X就要写
不能在新开的线程中,创建texture,texture必须在主线程创建.通俗点,就是所有的opengl api都必须在主线程中调用;其它的操作,比如文件,内存,plist等,可以在新线程中做。这个不是cocos2d不支持,是opengl的标准,不管你是在android,还是windows上使用opengl,都是这个原理
栈空间和堆空间
栈空间存储变量,又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈
堆空间则存储实例,一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表
cocos2d-x CCListView 在后期版本中改为CCTableview
TinyXML的使用中,插入新的数据后,要记得saveFile(保存文件)不然其操作都是无效的
在TinyXML中,除了Document是在栈中创建的,其它节点都是new出来,在堆中创建的,因为Document是在栈中创建的,退出方法时,会自己调用其析构函数,而在Document的析构函数中,会对其下的所有新建子节点进行释放Delete操作.所以我们会发现在TinyXML中出现许多new,却没有对应的Delete出现,就是因为这个原因
Lua随机数的第一个随机数总是固定,所以先消耗掉它
Windows 已在 最大数及其个数.exe 中触发一个断点。其原因可能是堆被损坏,这说明 最大数及其个数.exe 中或它所加载的任何 DLL 中有 Bug。原因也可能是用户在 最大数及其个数.exe 具有焦点时按下了 F12。输出窗口可能提供了更多诊断信息。
new() 和new[]的区别:new()只申请一个对象大小的内存并初始化,new[n]是申请n*对象大小内存
CCEditBox只可以在IOS和android上使用,因为源码中它会调用android和IOS中的原生输入控件还执行输入,而在Win32中是没有的,所以在Win32中会编绎错误