cocos2d-x 类大全及其概要,难点

  • 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值。
时间: 2024-12-04 07:32:55

cocos2d-x 类大全及其概要,难点的相关文章

cocos2d-x 类大全及其概要

CCNode 节点类是Cocos2D-x中的主要类,继承自CCObject. 任何需要画在屏幕上的对象都是节点类.最常用的节点类包括场景类(CCScene).布景层类(CCLayer).人物精灵类(CCSprite).菜单类(CCMenu) CCNode类包含的主要功能如下: 每个节点都可以包含有子节点. 节点含有周期性的毁掉方法(Schedule.Unschedule等). 可以含有动作(CCAction). CCDirector CCDirector类是Cocos2D-x游戏引擎的核心,用来

《Cocos2D权威指南》——第3章 3.0 Cocos2D核心类

第3章 3.0 Cocos2D核心类 本章主要分析第2章代码示例,同时向大家展示构成Cocos2D的核心类如何组织在一起并构成一个完整的游戏.几乎任何一款Cocos2D游戏中都会用到这些类,所以了解它们的作用.属性和方法,以及如何使用这些类,有助于我们开发出更好的游戏.掌握了这些基本知识,大家会发现Cocos2D并没有想象的那么难:而且即使只用这些类,也可以创造出很有意思的游戏.掌握这些游戏构建的关键类和关键概念之后,我们在开始一个新的游戏项目时会更加得心应手.

PHP常用工具类大全附全部代码下载_php实例

废话不多说了,直接给大家贴php代码了,具体代码如下所示: <?php /** * 助手类 * @author www.shouce.ren * */ class Helper { /** * 判断当前服务器系统 * @return string */ public static function getOS(){ if(PATH_SEPARATOR == ':'){ return 'Linux'; }else{ return 'Windows'; } } /** * 当前微妙数 * @retu

PHP的身份证号码工具类翻译的那个Java的

<?php /** * 身份证工具类 * * @author Tongle Xu <xutongle@gmail.com> 2013-6-6 * @copyright Copyright (c) 2003-2103 tintsoft.com * @license http://www.php100.com * @version $Id$ */ class Utils_Idcard { /** * 中国公民身份证号码最小长度. */ const CHINA_ID_MIN_LENGTH =

在Cocos2D中改变动态物体为静态物体

原文链接,有压缩和简化 1.导入一个新的头文件 首先你要知道,不是所有Chimpunk特性都通过Cocos2d的类暴露出来,比如CCPhysicsNode和CCPhysicsBody.对于一些更高级的特性你需要使用实际的Objective-Chipmunk API. 在Cocos2d 3.0中你需要导入一个特殊的头文件去访问CCPhysicalNode和CCPhysicsBody中位于Chipmunk之中的部分: #import "CCPhysics+ObjectiveChipmunk.h&qu

转 Cocos2d-x3.0模版容器详解之三:cocos2d::Value

1.概述 版本: v3.0 beta 语言: C++ 定义在 "COCOS2DX_ROOT/cocos/base" 路径下的 "CCValue.h" 的头文件中. ? 1 class Value; unioncocos2d::Valie 是一个包含了很多原生类型(int,float,double,bool,unsigned char,char* 和 std::string)外加 std::vector<Value>, std::unordered_map

《Cocos2D权威指南》——导读

前言 为什么要写这本书 2011年10月5日,秋风萧瑟,阴雨绵绵,在这颗蔚蓝色的美丽星球上,一代传奇伟人乔布斯在亲友的陪伴下安然离去,宛若流星划过天际,空留那辆银色的奔驰SL55AMG在落叶纷飞中孤独守候着曾经的主人.这个世界从此失去了一位引领科技创新的时代领袖. 从1976年在父母的车库中创业开始,乔布斯参与.开创并改变了几个行业-PC.电脑动画.数字音乐.移动互联网.他创办了苹果公司,中途又因某些原因被苹果驱逐.然而在苹果挣扎于濒死的边缘时,他又挺身而出将苹果救活,并把它推到无人可以企及的高

《Cocos2D权威指南》——第1章 1.0 开始前的准备工作

第一部分 基础篇 本部分内容 开始前的准备工作 你的第一款iPhone游戏-垂直射击游戏 Cocos2D核心类 Cocos2D中的动作.特效与动画 Cocos2D中的文本渲染系统Cocos2D中的事件处理机制Cocos2D世界的声音 在Cocos2D中使用瓷砖地图 物理引擎-更真实的Cocos2D世界 第1章 1.0 开始前的准备工作 本章我们将介绍什么是Cocos2D以及有关Cocos2D的一些重要基础知识,包括如何下载与安装Cocos2D-iPhone的模板.如何安装Cocos2D-iPho

以澳大利亚为例,对会计类职业评估做一详细解释

众所周知,在申请技术移民时,会计类职业评估难度大,尤其是对海外学历申请者,难点主要在于如何把握评估机构的要求.申请资料的齐备.特别是对大学专业课程的描述(Subject Outlines).本期就以澳大利亚为例,对会计类职业评估做一详细解释. 会计类职业评估 易"翻船" 在澳大利亚技术移民新政下,会计专业虽不再列紧缺职业清单,但是仍然是可移民的技术职业之一.澳大利亚移民职业清单(SOL)中60分的会计类的职业有四种:Accountant 会计(含财务分析).Corporate Trea