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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

原創作品,轉載請標明:http://blog.csdn.net/jackystudio/article/details/12703741

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


1.概況


CCNode直接從CCObject繼承而來,有如下幾個特點:

(1)可以包含其他CCNode節點,可以進行添加/獲取/刪除子節點操作。

(2)可以執行周期性的回調任務。

(3)可以執行動作。

一些子類化的節點提供了更為豐富的特性和功能。


2.屬性

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

  • 3.接口


    3.1.初始化

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

  • 3.2.圖形屬性

    [cpp]?view plaincopy
  • //設置/獲取Z軸順序,Z軸大的覆蓋Z軸小的??
  • ????virtual?void?setZOrder(int?zOrder);??
  • ????virtual?void?_setZOrder(int?z);??
  • ????virtual?int?getZOrder();??
  • ??
  • ????//設置/獲取OpenGL?Z軸頂點??
  • ????virtual?void?setVertexZ(float?vertexZ);??
  • ????virtual?float?getVertexZ();??
  • ??
  • ????//設置/獲取縮放值??
  • ????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);??
  • ??
  • ????//設置/獲取位置??
  • ????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);??
  • ??????
  • ????//設置/獲取傾斜角度??
  • ????virtual?void?setSkewX(float?fSkewX);??
  • ????virtual?float?getSkewX();??
  • ????virtual?void?setSkewY(float?fSkewY);??
  • ????virtual?float?getSkewY();??
  • ??
  • ????//設置/獲取錨點??
  • ????virtual?void?setAnchorPoint(const?CCPoint&?anchorPoint);??
  • ????virtual?const?CCPoint&?getAnchorPoint();??
  • ????virtual?const?CCPoint&?getAnchorPointInPoints();??
  • ??????
  • ????//設置/獲取大小??
  • ????virtual?void?setContentSize(const?CCSize&?contentSize);??
  • ????virtual?const?CCSize&?getContentSize()?const;??
  • ??
  • ????//設置/獲取可見性??
  • ????virtual?void?setVisible(bool?visible);??
  • ????virtual?bool?isVisible();??
  • ??
  • ????//設置/獲取旋轉角度??
  • ????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.節點操作

    [cpp]?view plaincopy
  • //添加/獲取子節點,可以帶Z軸順序(默認為0)和標簽??
  • ????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;??
  • ??????
  • ????//設置/獲取父節點??
  • ????virtual?void?setParent(CCNode*?parent);??
  • ????virtual?CCNode*?getParent();??
  • ??????
  • ????//從父節點中移除自身,默認cleanup為true??
  • ????virtual?void?removeFromParent();??
  • ????virtual?void?removeFromParentAndCleanup(bool?cleanup);??
  • ??
  • ????//移除子節點??
  • ????virtual?void?removeChild(CCNode*?child);??
  • ????virtual?void?removeChild(CCNode*?child,?bool?cleanup);??
  • ????virtual?void?removeChildByTag(int?tag);??
  • ????virtual?void?removeChildByTag(int?tag,?bool?cleanup);??
  • ??
  • ????//移除所有節點??
  • ????virtual?void?removeAllChildren();??
  • ????virtual?void?removeAllChildrenWithCleanup(bool?cleanup);??
  • ??????
  • ????//重新設置節點順序??
  • ????virtual?void?reorderChild(CCNode?*?child,?int?zOrder);??

  • 3.4.標簽和用戶數據

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

  • 3.5.事件回調

    [cpp]?view plaincopy
  • //事件回調??
  • ??????
  • ????//節點開始進入觸發??
  • ????virtual?void?onEnter();??
  • ????//節點完成進入觸發??
  • ????virtual?void?onEnterTransitionDidFinish();??
  • ????//節點退出觸發??
  • ????virtual?void?onExit();??
  • ????//如果節點退出有過渡動畫,動畫開始時觸發??
  • ????virtual?void?onExitTransitionDidStart();??
  • ????//停止動畫和調度器??
  • ????virtual?void?cleanup(void);??

  • 3.6.動作

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

  • 3.7.調度器和定時器

    [cpp]?view plaincopy
  • //獲取/設置調度器??
  • ????virtual?void?setScheduler(CCScheduler*?scheduler);??
  • ????virtual?CCScheduler*?getScheduler();??
  • ??????
  • ????//檢測某個調度器是否有在運行??
  • ????bool?isScheduled(SEL_SCHEDULE?selector);??
  • ??
  • ????//開啟update調度??
  • ????void?scheduleUpdate(void);??
  • ????//設置調度優先級??
  • ????void?scheduleUpdateWithPriority(int?priority);??
  • ????//關閉update調度器??
  • ????void?unscheduleUpdate(void);??
  • ??
  • ????//開啟/關閉/恢復/暫停調度器??
  • ????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);??
  • ??????
  • ????//每幀調用函數??
  • ????virtual?void?update(float?delta);??

  • 3.8.坐標轉換

    [cpp]?view plaincopy
  • //坐標轉換相關,這一部分后面再介紹??
  • 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
  • //獲取/設置著色程序??
  • virtual?CCGLProgram*?getShaderProgram();??
  • virtual?void?setShaderProgram(CCGLProgram?*pShaderProgram);??
  • ??
  • //獲取CCCamera對象??
  • virtual?CCCamera*?getCamera();??
  • ??
  • //節點是否在運行??
  • virtual?bool?isRunning();??
  • ??
  • //繪制節點??
  • virtual?void?draw(void);??
  • //遞歸訪問節點??
  • virtual?void?visit(void);??
  • ??
  • //返回所占矩形,節點坐標系??
  • CCRect?boundingBox(void);??

  • 4.CCNodeRGBA


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

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

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。