所謂工欲善其事,必先利其器。剛開始學iPhone軟體開發時,什麼都不懂,也沒有先去收集資訊,只是去網拍買了一本iPhone開發的工具書以及下載Apple官網的文件,就硬著頭皮一步步的學著寫。直到一次偶然的機會,看到國外的網站在討論cocos2d這個library,看了一下使用方法與教學後,這才發覺用cocos2d寫遊戲是件這麼容易的事情。
Cocos2d是一個開放原始碼的framework,它的主要功能是提供開發者一個簡單易用的函式庫,使開發者在開發遊戲時能專注在遊戲的設計與邏輯架構,而無需去擔心其它技術上瑣碎的問題。另外,依據官方的授權說明,基本上開發者可以免費使用它,同時使用它所開發的程式都可以在不公開原始碼的情況下進行販售。雖然說是免費使用,不過在這裡還是建議大家,如果哪天您用cocos2d開發的遊戲在app store上賺了大錢,記得回饋一點給cocos2d開發團隊。有了您的支持,開發團隊才能持續的維護cocos2d,並為它加入更多方便好用的功能。
Cocos2d提供了許多開發遊戲時需要的類別物件,但因種類繁多,不太可能在這裡一次介紹完。下面我將列舉幾個常用且重要的類別,作一個概略的介紹,剩下其它的功能,就等之後實作遇到時再加以說明。
CocosNode
CocosNode是cocos2d裡很重要的一個類別。在程式中如果遇到物件需要移動、顯示或者改變大小等事件,都可以透過CocosNode來進行處理。通常使用上不會直接宣告一個CocosNode物件,而是繼承它的特性並建立自已需要的物件類別。
CocosNode本身包含了許多可供調整的變數,比方說:
- position:設定物件位置
- scale:設定物件縮放
- rotation:設定物件旋轉
- contentSize:取得物件像素大小
- …
//加入CocosNodeCocosNode算是個很基本的類別,如果一個自己建立的物件只繼承它,那還是有很多的功能要自己補完。所以cocos2d也準備了幾個繼承CocosNode的副類別,增加了一些常用的功能,使我們在開發遊戲時更加方便。比如下面要介紹的Sprite,就是一個很好的例子。
[firstNode addChild: secondNode];
//移除CocosNode
[firstNode removeChild:secondNode];
Sprite
遊戲開發最常遇到的就是圖檔。不論是遊戲背景,遊戲角色,甚至是主角手那把雷射槍的子彈,都與圖檔脫離不了關係。Sprite繼承於CocosNode,它是一個專門用來處理圖形物件的類別。有關圖形的位置、大小、旋轉及透明度等設定都可以透過Sprite來處理。使用方法很簡單:
//建立一個新的Sprite物件mySprite,用來存取myFigure.png這裡要注意的是,把Sprite物件建立好後並不會顯示在畫面上。必需把它加入某個已顯示在畫面上的node,sprite所對應的圖形才會出現。也許您會好奇,那麼在什麼都沒有的畫面上,第一個建立的Sprite物件要加到哪裡呢?這時我們會用到Cocos2d裡兩個很重要的物件:Scene和Layer。
Sprite *mySprite = [Sprite spriteWithFile:@"myFigure.png"];
//把mySprite貼到某一個node上
[someNode addChild:mySprite];
Scene & Layer
Cocos2d上遊戲畫面的顯示,主要由Scene和Layer這兩個物件負責。Scene是場景的意思。一個遊戲通常會擁有許多場景,比方遊戲畫面、遊戲說明、分數列表,這些都會由其對應的場景物件負責處理。Scene是一個用來放置CocosNode的容器,通常遊戲的背景圖案會放在Scene裡面:
//建立一個Scene物件基本上只要是繼承CocosNode的副類別(像:Sprite)都可以疊在Scene物件上。但有些跟遊戲控制如觸控之類的事件,就不是Scene的工作範圍,因此這時會用另一個繼承CocosNode的副類別:Layer來處理。
Scene *myScene = [Scene node];
//建立一個包含背景圖檔的Sprite
Sprite *bg = [Sprite spriteWithFile:@"background.png"];
//把背景sprite 加到Scene物件裡
[myScene addChild:bg];
Scene負責的是現在螢幕呈現的是哪一個遊戲場景,而Layer負責的是這個場景裡和玩家互動的所有物件。一個Scene可以包含許多個Layer。通常我們會先在Scene裡放一個遊戲背景(其實要放在Layer也行),然後在上面再加入許多Layer。每個Layer各司其職,有的負責執行背景動畫,有的負責主要物件的動作,有的則是用來處理和玩家互動的按鈕。如果你喜歡,上述的幾個工作也可以只用一個Layer來處理,純粹是看程式設計需求而定。如果要建立一個Layer並放到Scene上面,程式的寫法如下:
Layer *myLayer = [myCustomLayer node];另外要補充說明的是,如果要在不同的Scene中切換,在cocos2d中是使用Director這個指令:
[myScene addChild:myLayer];
//建立一個要切換的Scene物件除了用來切換不同的Scene之外,Director也可以用來管理遊戲的流程,比方說:
Scene *newScene = [Scene node];
//藉由Director切換至新的Scene
[[Director shareDirector] replaceScene:newScene];
//暫停遊戲場景有了Director負責管理遊戲的流程,並配合Scene和Layer的使用,在開發遊戲上是不是方便許多呢?
[[Director shareDirector] pause];
//從暫停中回到遊戲
[[Director shareDirector] resume];
//結束遊戲場景
[[Director shareDirector] end];
Action
最後要介紹的是在cocos2d中相當有趣的功能。在遊戲中,我們常常可以看到物體由A點移動到B點,或者讓物體彈跳並且旋轉。這些動作都可以在cocos2d中藉由幾個預設的Action類別達成目的。
//移動某個SpriteCocos2d的簡介到這裡暫時先告一段落,如果想要對cocos2d有更進一步的認識,可以到他們的官方網站逛逛。Cocos2d裡所有類別的說明也可以在這裡找到。
[mySprite runAction: [MoveTo actionWithDuration:1.0 position:ccp(0,0)]];
//使某個Sprite彈跳移動
[mySprite runAction:[JumpBy actionWithDuration:1.0 position:ccp (320,240) height:2.0 jumps:5]];
//使某個Sprite淡出至透明
[mySprite runAction:[FadeTo actionWithDuration:1.0 opacity:0]];
到目前為止該介紹的都介紹的差不多了,從下一篇開始,將進入實際操作的部份。趕快準備好您的mac,我們要開始寫程式囉~
沒有留言:
張貼留言