日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【玩转cocos2d-x之六】节点类CCNode

發(fā)布時(shí)間:2024/4/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【玩转cocos2d-x之六】节点类CCNode 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原創(chuàng)作品,轉(zhuǎn)載請(qǐng)標(biāo)明:http://blog.csdn.net/jackystudio/article/details/12703741

節(jié)點(diǎn)類CCNode可以說是游戲元素的祖宗了,基本上我們看得到的游戲元素都是以它為原型進(jìn)行擴(kuò)展的。像CCScene,CCLayer,CCSprite,CCMenu,CCSpriteBatchNode等等都是從CCNode繼承而來。另外如果我們要自定義精靈,那么從CCNode繼承也是一個(gè)很不錯(cuò)的選擇。


1.概況


CCNode直接從CCObject繼承而來,有如下幾個(gè)特點(diǎn):

(1)可以包含其他CCNode節(jié)點(diǎn),可以進(jìn)行添加/獲取/刪除子節(jié)點(diǎn)操作。

(2)可以執(zhí)行周期性的回調(diào)任務(wù)。

(3)可以執(zhí)行動(dòng)作。

一些子類化的節(jié)點(diǎn)提供了更為豐富的特性和功能。


2.屬性

[cpp]?view plaincopy
  • Features?of?CCNode:??
  • -?position???????????????????????????????????//位置,默認(rèn)(0,0)??
  • -?scale?(x,?y)???????????????????????????????//縮放,默認(rèn)(1,1)??
  • -?rotation?(in?degrees,?clockwise)???????????//旋轉(zhuǎn),默認(rèn)為0??
  • -?skew???????????????????????????????????????//傾斜,默認(rèn)為0??
  • -?CCCamera?(an?interface?to?gluLookAt?)??????//CCCamera,視點(diǎn)轉(zhuǎn)換,每個(gè)節(jié)點(diǎn)都有,默認(rèn)指向節(jié)點(diǎn)中心??
  • -?CCGridBase?(to?do?mesh?transformations)????//CCGridBase,網(wǎng)類轉(zhuǎn)變??
  • -?anchor?point???????????????????????????????//錨點(diǎn),默認(rèn)(0,0)??
  • -?size???????????????????????????????????????//尺寸,默認(rèn)(0,0)??
  • -?visible????????????????????????????????????//可見??
  • -?z-order????????????????????????????????????//z軸值??
  • -?openGL?z?position??????????????????????????//OpenGL?z值??

  • 3.接口


    3.1.初始化

    [cpp]?view plaincopy
  • ????//初始化函數(shù),成功返回true??
  • ???virtual?bool?init();??
  • ??
  • //分配內(nèi)存空間,調(diào)用init并添加autoRelease標(biāo)記??
  • ???static?CCNode?*?create(void);??
  • ?????
  • ???//返回描述字符串??
  • ???const?char*?description(void);??

  • 3.2.圖形屬性

    [cpp]?view plaincopy
  • //設(shè)置/獲取Z軸順序,Z軸大的覆蓋Z軸小的??
  • ????virtual?void?setZOrder(int?zOrder);??
  • ????virtual?void?_setZOrder(int?z);??
  • ????virtual?int?getZOrder();??
  • ??
  • ????//設(shè)置/獲取OpenGL?Z軸頂點(diǎn)??
  • ????virtual?void?setVertexZ(float?vertexZ);??
  • ????virtual?float?getVertexZ();??
  • ??
  • ????//設(shè)置/獲取縮放值??
  • ????virtual?void?setScaleX(float?fScaleX);??
  • ????virtual?float?getScaleX();??
  • ????virtual?void?setScaleY(float?fScaleY);??
  • ????virtual?float?getScaleY();??
  • ????virtual?void?setScale(float?scale);??
  • ????virtual?float?getScale();??
  • ????virtual?void?setScale(float?fScaleX,float?fScaleY);??
  • ??
  • ????//設(shè)置/獲取位置??
  • ????virtual?void?setPosition(const?CCPoint?&position);??
  • ????virtual?const?CCPoint&?getPosition();??
  • ????virtual?void?setPosition(float?x,?float?y);??
  • ????virtual?void?getPosition(float*?x,?float*?y);??
  • ????virtual?void??setPositionX(float?x);??
  • ????virtual?float?getPositionX(void);??
  • ????virtual?void??setPositionY(float?y);??
  • ????virtual?float?getPositionY(void);??
  • ??????
  • ????//設(shè)置/獲取傾斜角度??
  • ????virtual?void?setSkewX(float?fSkewX);??
  • ????virtual?float?getSkewX();??
  • ????virtual?void?setSkewY(float?fSkewY);??
  • ????virtual?float?getSkewY();??
  • ??
  • ????//設(shè)置/獲取錨點(diǎn)??
  • ????virtual?void?setAnchorPoint(const?CCPoint&?anchorPoint);??
  • ????virtual?const?CCPoint&?getAnchorPoint();??
  • ????virtual?const?CCPoint&?getAnchorPointInPoints();??
  • ??????
  • ????//設(shè)置/獲取大小??
  • ????virtual?void?setContentSize(const?CCSize&?contentSize);??
  • ????virtual?const?CCSize&?getContentSize()?const;??
  • ??
  • ????//設(shè)置/獲取可見性??
  • ????virtual?void?setVisible(bool?visible);??
  • ????virtual?bool?isVisible();??
  • ??
  • ????//設(shè)置/獲取旋轉(zhuǎn)角度??
  • ????virtual?void?setRotation(float?fRotation);??
  • ????virtual?float?getRotation();??
  • ????virtual?void?setRotationX(float?fRotaionX);??
  • ????virtual?float?getRotationX();??
  • ????virtual?void?setRotationY(float?fRotationY);??
  • ????virtual?float?getRotationY();??

  • 3.3.節(jié)點(diǎn)操作

    [cpp]?view plaincopy
  • //添加/獲取子節(jié)點(diǎn),可以帶Z軸順序(默認(rèn)為0)和標(biāo)簽??
  • ????virtual?void?addChild(CCNode?*?child);??
  • ????virtual?void?addChild(CCNode?*?child,?int?zOrder);??
  • ????virtual?void?addChild(CCNode*?child,?int?zOrder,?int?tag);??
  • ????CCNode?*?getChildByTag(int?tag);??
  • ????virtual?CCArray*?getChildren();??
  • ????unsigned?int?getChildrenCount(void)?const;??
  • ??????
  • ????//設(shè)置/獲取父節(jié)點(diǎn)??
  • ????virtual?void?setParent(CCNode*?parent);??
  • ????virtual?CCNode*?getParent();??
  • ??????
  • ????//從父節(jié)點(diǎn)中移除自身,默認(rèn)cleanup為true??
  • ????virtual?void?removeFromParent();??
  • ????virtual?void?removeFromParentAndCleanup(bool?cleanup);??
  • ??
  • ????//移除子節(jié)點(diǎn)??
  • ????virtual?void?removeChild(CCNode*?child);??
  • ????virtual?void?removeChild(CCNode*?child,?bool?cleanup);??
  • ????virtual?void?removeChildByTag(int?tag);??
  • ????virtual?void?removeChildByTag(int?tag,?bool?cleanup);??
  • ??
  • ????//移除所有節(jié)點(diǎn)??
  • ????virtual?void?removeAllChildren();??
  • ????virtual?void?removeAllChildrenWithCleanup(bool?cleanup);??
  • ??????
  • ????//重新設(shè)置節(jié)點(diǎn)順序??
  • ????virtual?void?reorderChild(CCNode?*?child,?int?zOrder);??

  • 3.4.標(biāo)簽和用戶數(shù)據(jù)

    [cpp]?view plaincopy
  • //設(shè)置/獲取tag??
  • virtual?int?getTag()?const;??
  • virtual?void?setTag(int?nTag);??
  • ??
  • //設(shè)置/獲取userdata,它是一個(gè)指針可以指向你想要的任意數(shù)據(jù)塊,不過記得要釋放??
  • virtual?void*?getUserData();??
  • virtual?void?setUserData(void?*pUserData);??
  • ??
  • //設(shè)置/獲取CCObject,和上面一樣,只是數(shù)據(jù)換成了CCObject對(duì)象??
  • virtual?CCObject*?getUserObject();??
  • virtual?void?setUserObject(CCObject?*pUserObject);??

  • 3.5.事件回調(diào)

    [cpp]?view plaincopy
  • //事件回調(diào)??
  • ??????
  • ????//節(jié)點(diǎn)開始進(jìn)入觸發(fā)??
  • ????virtual?void?onEnter();??
  • ????//節(jié)點(diǎn)完成進(jìn)入觸發(fā)??
  • ????virtual?void?onEnterTransitionDidFinish();??
  • ????//節(jié)點(diǎn)退出觸發(fā)??
  • ????virtual?void?onExit();??
  • ????//如果節(jié)點(diǎn)退出有過渡動(dòng)畫,動(dòng)畫開始時(shí)觸發(fā)??
  • ????virtual?void?onExitTransitionDidStart();??
  • ????//停止動(dòng)畫和調(diào)度器??
  • ????virtual?void?cleanup(void);??

  • 3.6.動(dòng)作

    [cpp]?view plaincopy
  • //獲取/設(shè)置動(dòng)作管理器??
  • ????virtual?void?setActionManager(CCActionManager*?actionManager);??
  • ????virtual?CCActionManager*?getActionManager();??
  • ??????
  • ????//運(yùn)行動(dòng)作??
  • ????CCAction*?runAction(CCAction*?action);??
  • ??
  • ????//停止動(dòng)作??
  • ????void?stopAllActions(void);??
  • ????void?stopAction(CCAction*?action);??
  • ????void?stopActionByTag(int?tag);??
  • ????CCAction*?getActionByTag(int?tag);??
  • ??
  • ????//獲取正在運(yùn)行動(dòng)作數(shù)??
  • ????unsigned?int?numberOfRunningActions(void);??

  • 3.7.調(diào)度器和定時(shí)器

    [cpp]?view plaincopy
  • //獲取/設(shè)置調(diào)度器??
  • ????virtual?void?setScheduler(CCScheduler*?scheduler);??
  • ????virtual?CCScheduler*?getScheduler();??
  • ??????
  • ????//檢測某個(gè)調(diào)度器是否有在運(yùn)行??
  • ????bool?isScheduled(SEL_SCHEDULE?selector);??
  • ??
  • ????//開啟update調(diào)度??
  • ????void?scheduleUpdate(void);??
  • ????//設(shè)置調(diào)度優(yōu)先級(jí)??
  • ????void?scheduleUpdateWithPriority(int?priority);??
  • ????//關(guān)閉update調(diào)度器??
  • ????void?unscheduleUpdate(void);??
  • ??
  • ????//開啟/關(guān)閉/恢復(fù)/暫停調(diào)度器??
  • ????void?schedule(SEL_SCHEDULE?selector,?float?interval,?unsigned?int?repeat,?float?delay);??
  • ????void?schedule(SEL_SCHEDULE?selector,?float?interval);??
  • ????void?scheduleOnce(SEL_SCHEDULE?selector,?float?delay);??
  • ????void?schedule(SEL_SCHEDULE?selector);??
  • ????void?unschedule(SEL_SCHEDULE?selector);??
  • ????void?unscheduleAllSelectors(void);??
  • ????void?resumeSchedulerAndActions(void);??
  • ????void?pauseSchedulerAndActions(void);??
  • ??????
  • ????//每幀調(diào)用函數(shù)??
  • ????virtual?void?update(float?delta);??

  • 3.8.坐標(biāo)轉(zhuǎn)換

    [cpp]?view plaincopy
  • //坐標(biāo)轉(zhuǎn)換相關(guān),這一部分后面再介紹??
  • CCPoint?convertToNodeSpace(const?CCPoint&?worldPoint);??
  • CCPoint?convertToWorldSpace(const?CCPoint&?nodePoint);??
  • CCPoint?convertToNodeSpaceAR(const?CCPoint&?worldPoint);??
  • CCPoint?convertToWorldSpaceAR(const?CCPoint&?nodePoint);??
  • CCPoint?convertTouchToNodeSpace(CCTouch?*?touch);??
  • CCPoint?convertTouchToNodeSpaceAR(CCTouch?*?touch);??

  • 3.9.其他

    [cpp]?view plaincopy
  • //獲取/設(shè)置著色程序??
  • virtual?CCGLProgram*?getShaderProgram();??
  • virtual?void?setShaderProgram(CCGLProgram?*pShaderProgram);??
  • ??
  • //獲取CCCamera對(duì)象??
  • virtual?CCCamera*?getCamera();??
  • ??
  • //節(jié)點(diǎn)是否在運(yùn)行??
  • virtual?bool?isRunning();??
  • ??
  • //繪制節(jié)點(diǎn)??
  • virtual?void?draw(void);??
  • //遞歸訪問節(jié)點(diǎn)??
  • virtual?void?visit(void);??
  • ??
  • //返回所占矩形,節(jié)點(diǎn)坐標(biāo)系??
  • CCRect?boundingBox(void);??

  • 4.CCNodeRGBA


    CCNodeRGBA繼承于CCNode,所以它擁有CCNode的所有特性,并且它也繼承于CCRGBAProtocol。從名字看來我們就知道它是一個(gè)帶有顏色和透明度的節(jié)點(diǎn)。

    所以它比起CCNode就多了2個(gè)特性,Opacity和RGB值。

    如果要給子節(jié)點(diǎn)傳遞透明度屬性,那么需要設(shè)置setCascadeOpacityEnabled(true),如果傳遞的過程中遇到了CCNode,那么傳遞會(huì)中斷。顏色值的傳遞也是一樣的道理。

    總結(jié)

    以上是生活随笔為你收集整理的【玩转cocos2d-x之六】节点类CCNode的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。