cocos2d-x 类大全及其概要
- CCNode
- CCDirector
- CCCamera
- CCTouchDispatcher
1.注册的代理以优先级排序,在addTargetedDelegate()时完成插入,delegate的优先级通过在队列的位置来体现,优先级别高的位置靠前(虽然可以指定优先级数值,但内部没有任何优先级记录),相同优先级的delegates,后插入的位置靠前。 - CCCardinalSplineBy
1.这个类是样条曲线动作,其创建函数CCCardinalSplineBy::create(float duration, cocos2d::CCPointArray *points, float tension);中duration是时间间隔,points是控制点列表,tension是松紧程度。tension==1时,样条线是分段直线。tension<1向外松弛弯曲,tension>1向内缩紧弯曲。By动作是以当前坐标为新坐标原点。 - CCLayer,CCScene
这两个类最特殊的一点是m_bIgnoreAnchorPoint(2.0.4版本是这名变量名,之前的好像是m_bRelativeToAnchorPoint),其作用是表明在布置CCLayer和CCScene对象时,是否基于AnchorPoint。CCLayer和CCScene中这两个变量都是true(2.0.4的CCNode构造函数中的注释写错了,它居然说CCLayer,CCScene应该设置这个为true)。但即使m_bIgnoreAnchorPoint为true,AnchorPoint在旋转中起到轴心点作用并没有变,所以在CCLayer构造函数中调用了setAnchorPoint( 0.5, 0.5 )来保证中心旋转点。另外我之前在追究m_bIgnoreAnchorPoint的作用时,一直被一段代码困惑,后来弄明白了,这里说一下。
- CCAffineTransform CCNode::nodeToParentTransform(void)
- {
- if (m_bIsTransformDirty)
- {
- // Translate values
- float x = m_tPosition.x;
- float y = m_tPosition.y;
- if (m_bIgnoreAnchorPointForPosition)
- {
- x += m_tAnchorPointInPoints.x;
- y += m_tAnchorPointInPoints.y;
- }
- // Rotation values
- float c = 1, s = 0;
- if (m_fRotation)
- {
- float radians = -CC_DEGREES_TO_RADIANS(m_fRotation);
- c = cosf(radians);
- s = sinf(radians);
- }
- bool needsSkewMatrix = ( m_fSkewX || m_fSkewY );
- // optimization:
- // inline anchor point calculation if skew is not needed
- if (! needsSkewMatrix && !m_tAnchorPointInPoints.equals(CCPointZero))
- {
- x += c * -m_tAnchorPointInPoints.x * m_fScaleX + -s * -m_tAnchorPointInPoints.y * m_fScaleY;
- y += s * -m_tAnchorPointInPoints.x * m_fScaleX + c * -m_tAnchorPointInPoints.y * m_fScaleY;
- }
- // Build Transform Matrix
- m_tTransform = CCAffineTransformMake( c * m_fScaleX, s * m_fScaleX,
- -s * m_fScaleY, c * m_fScaleY,
- x, y );
- // XXX: Try to inline skew
- // If skew is needed, apply skew and then anchor point
- if (needsSkewMatrix)
- {
- CCAffineTransform skewMatrix = CCAffineTransformMake(1.0f, tanf(CC_DEGREES_TO_RADIANS(m_fSkewY)),
- tanf(CC_DEGREES_TO_RADIANS(m_fSkewX)), 1.0f,
- 0.0f, 0.0f );
- m_tTransform = CCAffineTransformConcat(skewMatrix, m_tTransform);
- // adjust anchor point
- if (!m_tAnchorPointInPoints.equals(CCPointZero))
- {
- m_tTransform = CCAffineTransformTranslate(m_tTransform, -m_tAnchorPointInPoints.x, -m_tAnchorPointInPoints.y);
- }
- }
- m_bIsTransformDirty = false;
- }
- return m_tTransform;
- }
上述代码中我一直不明白为什么m_bIgnoreAnchorPoint是true的时候,将m_tAnchorPointInPoints的坐标加入了原坐标。
- if (m_bIgnoreAnchorPointForPosition)
- {
- x += m_tAnchorPointInPoints.x;
- y += m_tAnchorPointInPoints.y;
- }
后来才明白,这是为了补偿后面旋转带来的偏差的。
- // optimization:
- // inline anchor point calculation if skew is not needed
- if (! needsSkewMatrix && !m_tAnchorPointInPoints.equals(CCPointZero))
- {
- x += c * -m_tAnchorPointInPoints.x * m_fScaleX + -s * -m_tAnchorPointInPoints.y * m_fScaleY;
- y += s * -m_tAnchorPointInPoints.x * m_fScaleX + c * -m_tAnchorPointInPoints.y * m_fScaleY;
- }
- CCAction这个类是动作的基类,有点需要注意的就是,我们不光可以通过CCSpawn让动画一起播放,我们在调用runAction的时候本身就是一种一起播放(即在调用runAction的时候如果已经有动画播放,那么新动画和旧动画即将一起播放)
- CCMotionStreak(拖动渐隐效果类)
这个类是个运动残影功能,拖一个影子在背后。
static CCMotionStreak* create(float fade, float minSeg, float stroke, ccColor3B color, const char* path);
fade:残影残存时间。
misSeg:测试了一会发现没太多感觉。一般设置为3就可以了。
stroke:残影的宽度。
color:将会添加再残影纹理上的颜色。
stroke:是其中的path是纹理路径,这个纹理将成为残影,color将会和纹理叠加。值得注意的是,这个类重载了setPosition并使用另外一个坐标变量,所以执行一些位置类运动会诡异的现象,如CCMoveBy,因为这些运动会通过原来的坐标变量来获取目标对象的起始坐标,但原来坐标已经被废弃。
- CCAnimationCache
这个类相当于简单的动画管理器,我们将动画加进去之后,以后可以方便的去取。这个函数加载动画的函数中有个比较好的函数:
void addAnimationsWithFile(const char* plist);
读取一个属性列表文件,然后根据里面列出的所有动画名称及其相关的序列帧就可以加载多个动画,前提是这些动画的序列帧已经存在于SpriteFrameCache中。 - CCTouch
这类中是对当前用户触摸点的封装,但更值得庆幸的是,在一次触摸消息流程中,你能通过这个类获得上一次坐标点,比如用户触摸屏幕,并滑动,最后松开。在这个过程中,你始终能通过getPreviousLocation()获得上一个坐标点。 - CCRenderTexture
这个类是个渲染目标体,我们可以通过begin,end函数组织一次绘画。在begin(),end()之间使用节点的visit()函数,即可将元素画到渲染目标体上。这里有一点很重要,所有的渲染默认情况下都是会开启颜色混合的。默认的是GL_ONE, GL_ONE_MINUS_SRC_ALPHA。颜色混合公式中也会作用于alpha值。
cocos2d-x 类大全及其概要的更多相关文章
- [WinForm]WinForm跨线程UI操作常用控件类大全
前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...
- C# 文件操作类大全
C# 文件操作类大全 时间:2015-01-31 16:04:20 阅读:1724 评论:0 收藏:0 [点我收藏+] 标签: 1.创建文件夹 //usin ...
- File 文件操作类 大全
File 文件操作类 大全 许多人都会对文件操作感到很难 我也是 但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴 等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦 ...
- 新手须知 QT类大全
QT类大全,在行内容中罗列出来了,希望大家多看看,如果是API就更好了,但可惜不是.这些是一些大类,请多做参考. QApplication 应用程序类 QLabel 标签类 QPushButton 按 ...
- cocos2d CCNode类(节点属性大全)
1 CCNode是cocos2d-x中一个很重要的类,CCNode是场景.层.菜单.精灵等的父类.而我们在使用cocos2d-x时,接触最多的就是场景.层.菜单.精灵等.所以有必要先弄懂CCNode类 ...
- FTP基本操作类大全,外加c#基础公共帮助类
总结平时用到的一些FTP操作类,方便需要的用到.github地址:https://github.com/Jimmey-Jiang/Common.Utility 1.连接FTP服务器 /// <s ...
- C# 各种帮助类大全
前言 此篇专门记录一些常见DB帮助类及其他帮助类,以便使用时不用重复造轮子. DBHelper帮助类 ①首当其冲的就是Sql Server帮助类,创建名为DbHelperSQL 的类 ,全部代码如下: ...
- 对象属性拷贝工具类大全==>Bean的属性拷贝从此不用愁
大家在做java开发时,肯定会遇到api层参数对象传递给服务层,或者把service层的对象传递给dao层,他们之间又不是同一个类型对象,但字段又是一样,如果还是用普通的get.set方式来处理话,比 ...
- Java Utils工具类大全(转)
源码和jar见:https://github.com/evil0ps/utils #Java Utils --- 封装了一些常用Java操作方法,便于重复开发利用. 另外希望身为Java牛牛的你们一起 ...
随机推荐
- VS2010对C++11的支持列表(感觉大部分都不支持)
c++11,就是之前的c++0x,已经成为了最新的c++标准.像咱这样天天用c++的,就赶紧follow一下.学习成果,放在这里,不说分享,至少自己增强下记忆. 首先,给出一些有用的链接. http: ...
- C语言指针和数组知识总结(下)
一.数组指针: 数组指针就是一个指针,只不过它指向的是一个数组.可以通过如下方式来定义 typedef int Array[5]; //数组类型 Array* m; //数组定义 还有一种更 ...
- ajax终结篇
Ajax中post和get的区别 在ajax中有这个方法 xmlreq.open("post","servlet/MyServlet?time="+newDat ...
- PAT 1002 Hello World for U (20)
Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. ...
- 非确定有限状态自动机的构建(一)——NFA的定义和实现
保留版权,转载需注明出处(http://blog.csdn.net/panjunbiao). 非确定有限状态自动机(Nondeterministic Finite Automata,NFA)由以下元素 ...
- EasyUI - SplitButton 分割按钮
效果: html代码: <!--使用标签创建,直接使用即可,不必使用js代码--> <%--<a href="javascript:void(0)" id= ...
- ubuntu 常用软件
terminator:任意分割控制台 Sublime Text:文本编辑器,也是轻量级的IDE Wireshark:抓包工具 Okular:PDF等文档编辑工具 yEd:流程图等制图软件 Shutte ...
- Linux路由器
Linux路由器 武溪嵌人 钻研嵌入式,改变未来 http://blog.csdn.net/zhang_danf Linux路由器 http://blog.csdn.net/zhang_dan ...
- How to retreive raw post data from HttpServletRequest in java
public static String getPostData(HttpServletRequest req) { StringBuilder sb = new StringBuilder(); t ...
- 通过IP或socket获取对方的MAC地址
1.通过已经连接的socket文件获取: int getpeermac( int sockfd, char *buf ) { int ret =0; struct arpreq arpreq; str ...