Cocos2d-X遊戲開發(三)

Cocos2d-X遊戲開發

  1. 節點

對象關係圖:

節點(Node)是Cocos2d-x中最重要的類,繼承自Ref類,同時也是所有節點的父類。

Cocos2d-x看所有需要繪製到屏幕的對象,或是自身包含要繪製到屏幕中的對象,都繼承自Node類,最常用的節點包括場景、層、精靈和菜單等,每一個節點只有一個父節點,但是可以有任意數量的子節點。

成員變量:

名稱

功能

_rotationX

表示節點X軸的水平旋轉的角度,節點以錨點爲中心順時針旋轉一定量,單位是角度。

_rotationY

表示節點y軸的垂直旋轉的角度,節點以錨點爲中心順時針旋轉一定量,單位是角度。

_scaleX

表示節點X軸的縮放比例,節點以錨點爲中心縮放該比例。

_scaleY

表示節點Y軸的縮放比例,節點以錨點爲中心縮放該比例。

_position

表示節點在屏幕中的位置。

_skewX

表示節點X軸的傾斜解度,節點以錨點爲中心,平行X軸順時針變形,單位爲角度,默認值爲0

_skewY

表示節點y軸的傾斜解度,節點以錨點爲中心,平行y軸逆時針變形,單位爲角度,默認值爲0

_anchorPoint

表示節點的錨點,用於精確地控制節點的位置和位置的變換,節點的變形和定位操作都要依據錨點來確定。

_contentSize

表示未經轉換的節點內容大小,以point(點)爲單位。

_globalZOrder

表示節點相對於其"兄弟"節點(擁有共同的父節點)的Z順序值。

_children

節點的子節點數組,變量類型是Vector<Node*>.

_parent

節點的父節點,通常很少用到。變量類型是Node.

_tag

用於識別節點的標識值。

_userData

獲取或設置與節點相關的額外信息,變量是一個void的指針對象,表示不確定的對象,可以是一個數據塊、一個結構或一個對象等,我們可以利用這個屬性來保存任何數據。

_visible

用於判斷節點是否可見。

_running

當使用同樣的Z值對子節點進行排序時,用該成員變量來決定子節點的順序,不要手動更改改數值。

_orderOfArrival

用於判斷當前節點是否在運行。

 

成員方法:

名稱

類型

功能

virtual void addChild(Node* childNode)

處理子節點

將新節點添加爲當前場景節點的子節點,z-order的值爲0

virtual void addChild(Node* child,int localZOrder,int tag)

處理子節點

將新節點添加爲當前場景節點的子節點並設置子節點的Z值。

virtual void addChild(Node* child,int localZOrder)

處理子節點

將新節點添加爲當前場景節點的子節點並設置子節點的Z值和tag值。

Node *getChildByTag(int tag)

處理子節點

使用場景容器的tag獲取子節點

virtual Vector<Node*>&getChildren()

處理子節點

獲取所有子節點

virtual void removeChildByTag(int tag,bool cleanup=true)

處理子節點

通過tag刪除子節點。

virtual void removeChild(Node* child, bool cleanup=true)

處理子節點

通過節點指針刪除子節點。

virtual void removeAllChildern()

處理子節點

刪除節點的所有子節點。

Action* runAction(Action* action)

動作

運行某個特定的動作,並返回執行的動作。

void stopAction(Action* action)

動作

從運行的動作列表中停止和刪除一個特定的動作。

void stopActionByTag(int tag)

動作

根據tag值從運行的動作列表停止和刪除一個特定的動作。

void stopAllActions()

動作

從運行的動作列表中停止和刪除所有的動作。

Action* getActionByTag(int tag)

動作

根據tag值從運行的動作列表中獲得一個特定的動作。

void scheduleUpdate()

定時器事件

啓用定時器回調更新函數,該函數每一幀都會被調用。

void schedule(SEL_SCHEDULE selector,float interval)

定時器事件

如果需要根據不同的時間間隔來觸發不同的定時更新邏輯,就需要指定運行特定的更新函數。

void scheduleOnce(SEL_SCHEDULE selector,float delay)

定時器事件

指定運行特定的更新函數,並設置調用的延遲時間,但只運行一次

void unscheduleUpdate()

定時器事件

停止scheduleUpdate中設置的預定更新函數update

void unscheduleUpdate(SEL_SCHEDULE selector)

定時器事件

停止指定運行的特定更新函數

virtual bool int()

其它

該函數用於初始化節點,返回bool值,表示是否成功。

virtual void onEnter()

其它

當節點所在的場景即將呈現時調用。

virtual void onExitTransitionDidStart()

其它

當節點所在場景的出場過渡效果結束後調用,如果沒有過渡效果,則緊接着onExit()後被調用。

virtual void cleanup()

其它

函數用於停止所有運行中的動作和定時器函數

virtual void draw()

其它

重寫該函數以繪製自己的節點

 

  1. 導演

Cocos2d-x中,把統籌遊戲大局的類抽象爲導演類(Director),Director是整個cocos2d-x引擎的核心,是整個遊戲的導航儀。遊戲中的一些常用操作就是由Director來控制的,比如OpenGL ES的初始化,場景的轉換遊戲暫停繼續的控制,世界座標GL座標之間的切換,對節點的控制等,還有一些遊戲數據的保存調用,屏幕尺寸的獲取等都要由Director類來管理控制的。

因爲Director是遊戲項目的總導演,會經常調用進行一些控制,所以該Director利用了單件設計模式,也就是整個遊戲裏只有一個導演類。用getInstance()方法取得Director的實例。

//創建一個導演類的單例

Director* pDirector = Director::getInstance();

getVisibleSize獲得可視區域的大小。若是設計分辨率跟屏幕尺寸一樣大,則getVisibleSize便是getWinSize

getWinSize獲取屏幕大小。

getVisibleOrigin:表示可視區域的起點座標。

另外還有一個就是Node節點裏面的getContentSize()函數。

getContentSize來獲得節點(Node)原始的大小。只是邏輯尺寸,不是像素

 

//獲取屏幕大小

autovisibleSize = Director::getInstance()->getVisibleSize();

Vec2origin = Director::getInstance()->getVisibleOrigin();

 

  1. 場景

在遊戲裏,場景就是關卡。關卡由人物角色和背景構成。在電影裏,場景就是電影中的各種場面,各種場面主要由人物活動和背景等構成。而在Cocos2d-x 引擎中,場景存放的是需要渲染的佈景,任務角色和菜單,它可以作爲一個整體,一起渲染,一起銷燬,一起被場景切換使用。

即遊戲關卡的實施者,其管理這多個Layer,進行場景展現,相關業務邏輯的處理等;

一個場景就是一個界面,定義了所顯示的所有角色圖層信息

Scene(場景)是一個抽象的概念,僅被用作Node(節點)的一個子類。Scene(場景)和Node(節點)幾乎相同,不同的是Scene的默認錨點在屏幕的中心。現在 scene 沒有其它的邏輯,不需要我們做太多的操作及處理,更多的操作處理基本都是在佈景層上完成。

    //創建場景

    autoscene = Scene::create();

    //創建圖層對象

    autolayer = StartLayer::create();

    //將圖層添加到場景

    scene->addChild(layer);

 

  1. 圖層

Layer是處理玩家事件響應的Node子類。與場景不同,層通常包含的是直接在屏幕上呈現的內容,並且可以接受用戶的輸入事件,包括觸摸、鍵盤輸入等。我們需要在層中加入Sprite(精靈)、文本標籤或者其它遊戲元素,並設置遊戲元素的屬性,比如位置、方向和大小;設置遊戲元素的動作等。在我們設計好層以後,只需要把層按照順序添加到場景中就可以顯示出來了。一個場景中有多個可以交互的圖層,每層顯示不同的角色信息,Layer層一方面作爲容器使用,另一方面處理相關事件的響應(如觸摸點擊、用戶輸入等)。

//創建一個層

auto layer = StartLayer::create();

發佈了39 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章