溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

cocos2d-x 類大全及其概要

發(fā)布時(shí)間:2020-07-12 14:24:37 來源:網(wǎng)絡(luò) 閱讀:188 作者:蓬萊仙羽 欄目:游戲開發(fā)
  • CCNode
節(jié)點(diǎn)類是Cocos2D-x中的主要類,繼承自CCObject。
任何需要畫在屏幕上的對(duì)象都是節(jié)點(diǎn)類。最常用的節(jié)點(diǎn)類包括場(chǎng)景類(CCScene)、布景層類(CCLayer)、人物精靈類(CCSprite)、菜單類(CCMenu)
CCNode類包含的主要功能如下:
每個(gè)節(jié)點(diǎn)都可以包含有子節(jié)點(diǎn)。
節(jié)點(diǎn)含有周期性的毀掉方法(Schedule、Unschedule等)。
可以含有動(dòng)作(CCAction)。
  • CCDirector
CCDirector類是Cocos2D-x游戲引擎的核心,用來創(chuàng)建并且控制著主屏幕的顯示,同時(shí)控制場(chǎng)景的顯示時(shí)間和方式。在整個(gè)游戲里一般只有一個(gè)導(dǎo)演。游戲開始、結(jié)束、暫停都會(huì)調(diào)用CCDirector類的方法。
CCDirector類具有如下功能:
1.初始化OpenGL回話。
2.設(shè)置OpenGL的一些參數(shù)和方式。
3.訪問和改變場(chǎng)景以及訪問Cocos2D-x的配置細(xì)節(jié)。
4.訪問視圖。
5.設(shè)置投影和朝向
需要說明一下,CCDirector是單例模式,調(diào)用CCDirector的方法標(biāo)準(zhǔn):CCDirector::sharedDirector()->函數(shù)名
  • CCCamera
CCCamera類可以實(shí)現(xiàn)節(jié)點(diǎn)對(duì)象的縮放和旋轉(zhuǎn)等。
  • CCTouchDispatcher
    1.注冊(cè)的代理以優(yōu)先級(jí)排序,在addTargetedDelegate()時(shí)完成插入,delegate的優(yōu)先級(jí)通過在隊(duì)列的位置來體現(xiàn),優(yōu)先級(jí)別高的位置靠前(雖然可以指定優(yōu)先級(jí)數(shù)值,但內(nèi)部沒有任何優(yōu)先級(jí)記錄),相同優(yōu)先級(jí)的delegates,后插入的位置靠前。
  • CCCardinalSplineBy
    1.這個(gè)類是樣條曲線動(dòng)作,其創(chuàng)建函數(shù)CCCardinalSplineBy::create(float duration, cocos2d::CCPointArray *points, float tension);中duration是時(shí)間間隔,points是控制點(diǎn)列表,tension是松緊程度。tension==1時(shí),樣條線是分段直線。tension<1向外松弛彎曲,tension>1向內(nèi)縮緊彎曲。By動(dòng)作是以當(dāng)前坐標(biāo)為新坐標(biāo)原點(diǎn)。
  • CCLayer,CCScene
    這兩個(gè)類最特殊的一點(diǎn)是m_bIgnoreAnchorPoint(2.0.4版本是這名變量名,之前的好像是m_bRelativeToAnchorPoint),其作用是表明在布置CCLayer和CCScene對(duì)象時(shí),是否基于AnchorPoint。CCLayer和CCScene中這兩個(gè)變量都是true(2.0.4的CCNode構(gòu)造函數(shù)中的注釋寫錯(cuò)了,它居然說CCLayer,CCScene應(yīng)該設(shè)置這個(gè)為true)。但即使m_bIgnoreAnchorPoint為true,AnchorPoint在旋轉(zhuǎn)中起到軸心點(diǎn)作用并沒有變,所以在CCLayer構(gòu)造函數(shù)中調(diào)用了setAnchorPoint( 0.5, 0.5 )來保證中心旋轉(zhuǎn)點(diǎn)。另外我之前在追究m_bIgnoreAnchorPoint的作用時(shí),一直被一段代碼困惑,后來弄明白了,這里說一下。
    [cpp] view plaincopy
    1. CCAffineTransform CCNode::nodeToParentTransform(void)  
    2. {  
    3.     if (m_bIsTransformDirty)   
    4.     {  
    5.   
    6.         // Translate values  
    7.         float x = m_tPosition.x;  
    8.         float y = m_tPosition.y;  
    9.   
    10.         if (m_bIgnoreAnchorPointForPosition)   
    11.         {  
    12.             x += m_tAnchorPointInPoints.x;  
    13.             y += m_tAnchorPointInPoints.y;  
    14.         }  
    15.   
    16.         // Rotation values  
    17.         float c = 1, s = 0;  
    18.         if (m_fRotation)   
    19.         {  
    20.             float radians = -CC_DEGREES_TO_RADIANS(m_fRotation);  
    21.             c = cosf(radians);  
    22.             s = sinf(radians);  
    23.         }  
    24.   
    25.         bool needsSkewMatrix = ( m_fSkewX || m_fSkewY );  
    26.   
    27.   
    28.         // optimization:  
    29.         // inline anchor point calculation if skew is not needed  
    30.         if (! needsSkewMatrix && !m_tAnchorPointInPoints.equals(CCPointZero))  
    31.         {  
    32.             x += c * -m_tAnchorPointInPoints.x * m_fScaleX + -s * -m_tAnchorPointInPoints.y * m_fScaleY;  
    33.             y += s * -m_tAnchorPointInPoints.x * m_fScaleX +  c * -m_tAnchorPointInPoints.y * m_fScaleY;  
    34.         }  
    35.   
    36.   
    37.         // Build Transform Matrix  
    38.         m_tTransform = CCAffineTransformMake( c * m_fScaleX,  s * m_fScaleX,  
    39.             -s * m_fScaleY, c * m_fScaleY,  
    40.             x, y );  
    41.   
    42.         // XXX: Try to inline skew  
    43.         // If skew is needed, apply skew and then anchor point  
    44.         if (needsSkewMatrix)   
    45.         {  
    46.             CCAffineTransform skewMatrix = CCAffineTransformMake(1.0f, tanf(CC_DEGREES_TO_RADIANS(m_fSkewY)),  
    47.                 tanf(CC_DEGREES_TO_RADIANS(m_fSkewX)), 1.0f,  
    48.                 0.0f, 0.0f );  
    49.             m_tTransform = CCAffineTransformConcat(skewMatrix, m_tTransform);  
    50.   
    51.             // adjust anchor point  
    52.             if (!m_tAnchorPointInPoints.equals(CCPointZero))  
    53.             {  
    54.                 m_tTransform = CCAffineTransformTranslate(m_tTransform, -m_tAnchorPointInPoints.x, -m_tAnchorPointInPoints.y);  
    55.             }  
    56.         }  
    57.   
    58.         m_bIsTransformDirty = false;  
    59.     }  
    60.   
    61.     return m_tTransform;  
    62. }  
    上述代碼中我一直不明白為什么m_bIgnoreAnchorPoint是true的時(shí)候,將m_tAnchorPointInPoints的坐標(biāo)加入了原坐標(biāo)。
    [cpp] view plaincopy
    1. if (m_bIgnoreAnchorPointForPosition)   
    2. {  
    3.     x += m_tAnchorPointInPoints.x;  
    4.     y += m_tAnchorPointInPoints.y;  
    5. }  
    后來才明白,這是為了補(bǔ)償后面旋轉(zhuǎn)帶來的偏差的。
    [cpp] view plaincopy
    1. // optimization:  
    2. // inline anchor point calculation if skew is not needed  
    3. if (! needsSkewMatrix && !m_tAnchorPointInPoints.equals(CCPointZero))  
    4. {  
    5.     x += c * -m_tAnchorPointInPoints.x * m_fScaleX + -s * -m_tAnchorPointInPoints.y * m_fScaleY;  
    6.     y += s * -m_tAnchorPointInPoints.x * m_fScaleX +  c * -m_tAnchorPointInPoints.y * m_fScaleY;  
    7. }  
  • CCAction這個(gè)類是動(dòng)作的基類,有點(diǎn)需要注意的就是,我們不光可以通過CCSpawn讓動(dòng)畫一起播放,我們?cè)谡{(diào)用runAction的時(shí)候本身就是一種一起播放(即在調(diào)用runAction的時(shí)候如果已經(jīng)有動(dòng)畫播放,那么新動(dòng)畫和舊動(dòng)畫即將一起播放)
    [cpp] view plaincopy
    1.   
  • CCMotionStreak(拖動(dòng)漸隱效果類)
    這個(gè)類是個(gè)運(yùn)動(dòng)殘影功能,拖一個(gè)影子在背后。
    static CCMotionStreak* create(float fade, float minSeg, float stroke, ccColor3B color, const char* path);
    fade:殘影殘存時(shí)間。
    misSeg:測(cè)試了一會(huì)發(fā)現(xiàn)沒太多感覺。一般設(shè)置為3就可以了。
    stroke:殘影的寬度。
    color:將會(huì)添加再殘影紋理上的顏色。
    stroke:是其中的path是紋理路徑,

    這個(gè)紋理將成為殘影,color將會(huì)和紋理疊加。值得注意的是,這個(gè)類重載了setPosition并使用另外一個(gè)坐標(biāo)變量,所以執(zhí)行一些位置類運(yùn)動(dòng)會(huì)詭異的現(xiàn)象,如CCMoveBy,因?yàn)檫@些運(yùn)動(dòng)會(huì)通過原來的坐標(biāo)變量來獲取目標(biāo)對(duì)象的起始坐標(biāo),但原來坐標(biāo)已經(jīng)被廢棄。
  • CCAnimationCache
    這個(gè)類相當(dāng)于簡(jiǎn)單的動(dòng)畫管理器,我們將動(dòng)畫加進(jìn)去之后,以后可以方便的去取。這個(gè)函數(shù)加載動(dòng)畫的函數(shù)中有個(gè)比較好的函數(shù):
    void addAnimationsWithFile(const char* plist);
    讀取一個(gè)屬性列表文件,然后根據(jù)里面列出的所有動(dòng)畫名稱及其相關(guān)的序列幀就可以加載多個(gè)動(dòng)畫,前提是這些動(dòng)畫的序列幀已經(jīng)存在于SpriteFrameCache中。
  • CCTouch
    這類中是對(duì)當(dāng)前用戶觸摸點(diǎn)的封裝,但更值得慶幸的是,在一次觸摸消息流程中,你能通過這個(gè)類獲得上一次坐標(biāo)點(diǎn),比如用戶觸摸屏幕,并滑動(dòng),最后松開。在這個(gè)過程中,你始終能通過getPreviousLocation()獲得上一個(gè)坐標(biāo)點(diǎn)。
  • CCRenderTexture
    這個(gè)類是個(gè)渲染目標(biāo)體,我們可以通過begin,end函數(shù)組織一次繪畫。在begin(),end()之間使用節(jié)點(diǎn)的visit()函數(shù),即可將元素畫到渲染目標(biāo)體上。這里有一點(diǎn)很重要,所有的渲染默認(rèn)情況下都是會(huì)開啟顏色混合的。默認(rèn)的是GL_ONE, GL_ONE_MINUS_SRC_ALPHA。顏色混合公式中也會(huì)作用于alpha值。
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI