天天看點

《Cocos2d 跨平台遊戲開發指南(第2版)》一2.8 添加難度選擇場景

本節書摘來異步社群《cocos2d 跨平台遊戲開發指南(第2版)》一書中的第2章,第2.8節,作者: 【印度】siddharth shekar(謝卡)譯者: 武傳海 責編: 胡俊英,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

在本部分中,我們将學習如何添加難度選擇場景,其中包含多種難度選擇按鈕,當你按下某個按鈕時,相應難度水準的遊戲就會被加載進來。

為了建立難度級别選擇場景,你需要一個自定義精靈,用來顯示按鈕背景圖檔以及表示難度級别的數字。首先,我們要建立這些按鈕。

在建立好按鈕精靈之後,接下來我們要建立一個新場景,用來存放背景圖像、場景名稱、按鈕數組,以及變換場景到指定遊戲難度的邏輯。

首先,我們建立一個新的 cocoa touch 類,命名為levelselectionbtn,它以ccsprite類作為父類。

然後,打開levelselectionbtn.h檔案,在其中添加如下代碼:

上面代碼中,我們建立了一個自定義的init函數,它帶有兩個參數,一個是圖像檔案名,用來指定按鈕背景圖像,另一個是整數,顯示在按鈕背景圖像之上,表示難度級别。

這就是levelselectionbtn.h檔案中的所有代碼。在levelselectionbtn.m檔案中,添加如下代碼:

在自定義的init函數中,首先把參數傳入的檔案名與遊戲難度級别數字在控制台中輸出,而後建立一個文本标簽,在把整數轉換為字元串之後傳遞給它。

随後,把文本标簽放置到目前精靈背景圖像的中央,通過把圖像的寬度與高度分别除以2得到圖像中心點坐标。

由于圖像背景與文本都是白色,是以需要把文本顔色修改為藍色,以便把文本顯示出來。

最後,我們把文本添加到目前的類中。

以上就是levelselectionbtn類的所有代碼。接下來,我們将建立levelselectionscene類,并向其中添加精靈按鈕與按下按鈕所要執行的邏輯。

建立好levelselectionscene類之後,在頭檔案(levelselectionscene.h)中添加如下代碼:

請注意,在levelselectionscene.h中,除了常見代碼之外,我們還建立了一個nsmutablearray類型的變量buttonsspritesarray,在後面的代碼中将會用到它。

接着,在levelselectionscene.m檔案中,添加如下代碼:

在上述代碼中,我們先添加了背景圖像、場景标題文本,并對nsmutablearray進行了初始化。

然後,我們建立了6個變量,如下所示(見圖2-10)。

widthcount:列數。

heightcount:行數。

spacing:精靈按鈕之間的距離,防止它們重疊在一起。

halfwidth:指從螢幕中心到第一個精靈按鈕左上角的距離在x軸上的投影而得到的距離。

halfheight:指從螢幕中心到第一個精靈按鈕左上角的距離在y軸上的投影而得到的距離。

lvlnum:指顯示在精靈按鈕上表示難度級别的數字,預設值為1,每次建立一個按鈕,其值就會增加1。

《Cocos2d 跨平台遊戲開發指南(第2版)》一2.8 添加難度選擇場景

在雙重循環中,我們将擷取每個按鈕精靈的x與y坐标。首先,為了擷取y值,我們要用halfheight減去spacing與循環變量i的乘積。由于i的初始值為0,是以最頂行的y值為halfheigh。

随後,計算按鈕位置的x值,計算時我們使用halfwidth加上spacing與j的乘積。每次x值都會被spacing增大。

在擷取x與y值之後,建立一個新的levelselectionbtn精靈,傳入btnbg.png圖像,以及lvlnum值,生成按鈕精靈。

然後,把之前計算得到的x與y值賦給按鈕精靈的position屬性。

為了通過數字引用按鈕,我們先把levelnum轉換為字元串,而後将其賦給按鈕精靈的name屬性,也就是說引用按鈕的數字與其上顯示的代表難度級别的數字是一緻的。

接下來,把按鈕添加到場景之中,同時按鈕也會被添加到之前建立的全局按鈕精靈數組之中,這是因為後面我們需要對這些圖像進行循環。

最後,把levelnum值增加1。

然而,目前我們還沒有向精靈按鈕添加任何互動行為,當添加互動行為後,每次按下按鈕,就會加載相應難度級别的遊戲場景。

為了添加觸摸互動行為,我們将使用cocos2d内置的touchbegan函數。在本書的後面章節中,我們将建立更複雜的遊戲界面。而這裡,我們隻使用基本的touchbegan函數。

在同一個檔案中,在init函數與@end之間添加如下代碼:

每次當我們觸碰螢幕時,touchbegan函數都會被調用執行。

是以,當我們觸碰螢幕時,應用程式就會擷取觸碰的位置,并将其儲存到location變量中。

而後,使用for in循環周遊添加到buttonspritesarray數組中的所有按鈕精靈。

并且,調用rectcontainspoint函數,檢測我們觸碰的位置是否位于任一個按鈕精靈的矩形框之内。

若是,則在控制台中輸出相關資訊,告知使用者單擊了哪個按鈕,這樣一來,我們就能知道是否加載了正确難度級别的場景。

接着,我們建立了一個淡入淡出過渡效果,并且從目前場景切換到gameplayscene,并使用所單擊的按鈕精靈名稱進行初始化。

最後,我們需要把boolean型變量userinteractionenabled設定為false,禁止目前類監聽使用者的觸屏行為。

當然,這需要我們在init函數開始的時候先把userinteractionenabled設定為true,即在init函數中添加如下粗體代碼。

至此,我們已經編寫好了levelselectionscene類。但是,我們還需要向mainscene添加一個按鈕以便打開levelselectionscene。

在mainscene的init函數中添加如下粗體代碼。我們主要添加了menubtn按鈕,以及單擊它時要調用的函數。

請不要忘記把menubtn.png檔案從本章的資源檔案夾複制到項目中,否則會出現編譯錯誤。

接下來,添加menubtnpressed函數,一旦menubtn按鈕按下且被釋放,它就會被調用執行,代碼如下:

現在,mainscene場景如圖2-11所示。

《Cocos2d 跨平台遊戲開發指南(第2版)》一2.8 添加難度選擇場景

單擊play按鈕之下的菜單按鈕,你将看到如下levelselectscreen場景,裡面羅列出了所有的難度級别,如圖2-12所示。

《Cocos2d 跨平台遊戲開發指南(第2版)》一2.8 添加難度選擇場景

此時,單擊任意一個按鈕,即可切換到gameplayscene場景,并且把你所單擊的代表難度級别的數字一同顯示出來。

由于我單擊了18号按鈕,是以在切換到gameplayscene場景後,顯示出的數字為18,如圖2-13所示。

《Cocos2d 跨平台遊戲開發指南(第2版)》一2.8 添加難度選擇場景

繼續閱讀