Cocos2d iPhone教程 是本文要介紹內容,作為遊戲開發中2D圖形的一篇文章,我們先來看內容。Cocos2D-iPhone是一個開源架構,利用它可以非常容易的在iPhone上開發2D遊戲。它提供了物理,精靈sprites),時差捲軸parallax scrolling),支援iPhone touch和accelerator等很多功能。
現在在App Store上已經有不少用Cocos2D開發的遊戲--所以你也可以用它做出很棒的遊戲。Cocos2D的開發人員甚至跟大家分享了一些使用這個開發架構的最佳實務。
好不容易找到一篇比較詳細的基礎使用教程,翻譯成中文供大家學習.
最近 Monocle Studios LLC發布了其下第一款產品”touchDefense“,這是一款iPhone遊戲.如果沒有Cocos2d iPhone,我們不可能這麼快讓這個遊戲在AppStore上架.我們應該回饋這個項目.這個白皮書是首要的第一步.
開始Cocos2d iPhone開發.
加入IDP.
最首要的一步是註冊成為一個專業的iPhone開發人員.對於開發而言它是免費的(儘管當你需要在真機上運行你的程式時必須支付99美金),和其他的方法比它可快多了.
接下來你需要下載iPhone SDK,這個下載的工程可有點大.你會恨不得它以最快的速度下載下來.
XCode入門.
下一步,我們需要在XCode中建立一個標準的iPhone項目.
點擊File -> New Project
選擇iPhone OS一欄下的Application
最後選擇 Window-Based Application模板
點擊Choos按鈕
接下來給這個項目命名(我們將其命名為SimpleGame,在本例中你就和我們一樣命名吧,閱讀教程的時候就不會混亂了),並且儲存在某個適當的位置.接下來這個項目將被開啟,如:
現在為您的項目添加版本控制!我們喜歡用 Git , 這使得建立一個新的項目庫非常快:
- cd SimpleGame
- git init
- git commit -a -m "Initial commit."
你可能更喜歡用Mercurial 或 SVN, 他們同樣很棒, 那就按自己的喜好用吧!
在我們繼續之前,先點擊一下Build and Go按鈕,你在就能iPhone模擬器中看見一個只有白色的螢幕(這就是SimpleGame最開始的樣子).
去除window和nib檔案.
基於Cocos2d iPhone的項目並不需要使用nib或者標準的UI組件,所以我們需要對這個XCode建立的預設項目進行一些修改.(很不幸,在使用Cocos2d iPhone時沒有不需要修改就能用的完美模板).首先, 刪除MainWindow.xib檔案.
然後, 在Info.plist檔案中刪除Main nib file base name這條內容.
接下來我們還將要修改一些源檔案,替換main.m中的一些內容,替換結果如下:
- #import <UIKit/UIKit.h>int main(int argc, char *argv[]) {
- NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
- int retVal = UIApplicationMain(argc, argv, nil,
- @”SimpleGameAppDelegate”);
- [pool release];
- return retVal;
- }
其次是修改SimpleGameAppDelegate.h,修改後如下:
- #import <UIKit/UIKit.h>@interface SimpleGameAppDelegate : NSObject <UIApplicationDelegate> {
- }
- @end
最後, 修改SimpleGameAppDelegate.m,修改後如下s:
- #import “SimpleGameAppDelegate.h”@implementation SimpleGameAppDelegate
- - (void)applicationDidFinishLaunching:(UIApplication *)app {
- }
- @end
這些修改弄好之後可以先不用管他們了,當你開始一個新的項目時,記得回這裡看看就行(最好你能以此建立一個Cocos2d iPhone項目的模板,那你就能一勞永逸了).
整合Cocos2d iPhone.
我們下一步是從Google Code上將Cocos2d iPhon最新的庫抓下來.進入Cocos2d iPhone下載頁 ,並且選擇0.7.0 版本 ,將其下載下來.
- tar -xvf cocos2d-iphone-0.7.0.tar
接下來回到你的項目中
選 擇Project菜單 -> Add Files to Project …然後瀏覽你剛剛解壓縮的目錄,將這個目錄添加到您的項目中,你可以勾選 Copy items into destination group's folder (if needed)前的複選框,點擊Add按鈕.
接下來,這是很重要的一個步驟,刪除External\Chipmunk目錄下的Demo檔案夾.在這之後呢,你可以先嘗試編譯一下你的項目,確保沒有什麼問題.(這種編譯過程中的問題,早發現早修複,以後再找問題會相對麻煩很多)
現在,回到項目視窗選擇 Project->Add Files to Project 將cocos2d-iphone-0.7.0/cocos2d檔案夾加入你的項目中.
重複上面的操作將cocos2d-iphone-0.7.0/cocoslive和 cocos2d-iphone-0.7.0/experimental檔案夾加入到你的項目中.
最後,將cocos2d-iphone-0.7.0/cocos2d/Resources/fps_images.png加入到你項目中的Resources組下.
我 們已經完成 cocos2d-iphone的配置,但是這個項目還沒有編譯過,在左側的分欄中找到targets,點擊SimpleGame左側的小箭頭展開它,選擇 Link Binary With Libraries,彈出滑鼠右鍵,選擇Add->Add Existing Frameworks,就像中的那樣.
在之後彈出的視窗中,點擊視窗下方的”+”號按鈕(在Linked Libraries列表的下方),在彈出的frameworks列表中選擇 OpenGLES.framework和 QuartzCore.framework.
點擊add按鈕之後,你的linked libraries列表應該和一樣.
現在,當你build你的項目時,它們將被編譯到項目中.當然,現在還沒法做任何事情,但是沒有編譯失敗,這就是最棒的了.
整理項目.
讓我們高效的整理一下項目結構,現在你很難找出SimpleGameAppDelegate檔案了吧,因為他們一大堆東西都顯示在項目的根層級下.
在項目下建立兩個Groups:Support 和 Classes
首先移動 Chipmunk 和 cocos2d到Support組下.接下來移動SimpleGameAppDelegate.h 和 SimpleGameAppDelegate.m到Classes組下.完成後你的項目層級看起來就像:
這並不必要的步驟,但是保持項目層級的清晰是會讓你的工作事半功倍的.
建立一個主菜單.
現在我們終於要正是開始使用Cocos2d iPhone了.在編寫代碼之前,我們先抽幾分鐘的時間做一個概述,接下來的課程中我們將要使用.
在 Cocos2d iPhone中,你將可以方便快捷的處理現場Scence,層Layer等.情境Scence就是一個當你建立了它之後,玩家就可以看見 它.它是由一個或多個層Layer組成的.要顯示一個特定的情境Scence,你要告訴Director(這是一個單例模式類)去顯示它.
現在我們要建立MenuScene ,這是一個情境的子類,還要建立一個MenuLayer ,我們的菜單中將包含他們。
最後,我們要串連的applicationDidFinishLaunching方通知訴Dorector執行MenuScene 。
我們需要在項目中添加一個圖片來作為我們MENU 層的背景,你可以下載這張圖片並加入到你項目中
現在開始寫代碼啦.滑鼠右鍵單擊Classes組,並選擇 Add->New File...,選擇Cocoa Touch Classes中的NSObject subclass檔案類型,命名為 MenuScene.m(完成時將自動建立.h的標頭檔)
現在開啟MenuScene.h檔案,並將代碼改成看起如下.
- #import <UIKit/UIKit.h>
- #import “cocos2d.h”@interface MenuScene : Scene {}
- @end
- @interface MenuLayer : Layer {}
- -(void)startGame: (id)sender;
- -(void)help: (id)sender;
- @end
接下來我們要讓MenuScene.m實現為MenuScene 和 MenuLayer類
- #import “MenuScene.h”
- @implementation MenuScene
- - (id) init {
- self = [super init];
- if (self != nil) {
- Sprite * bg = [Sprite spriteWithFile:@"menu.png"];
- [bg setPosition:cpv(240, 160)];
- [self add:bg z:0];
- [self add:[MenuLayer node] z:1];
- }
- return self;
- }
- @end@implementation MenuLayer
- - (id) init {
- self = [super init];
- if (self != nil) {
- [MenuItemFont setFontSize:20];
- [MenuItemFont setFontName:@"Helvetica"];
- MenuItem *start = [MenuItemFont itemFromString:@"Start Game"
- target:self
- selector:@selector(startGame:)];
- MenuItem *help = [MenuItemFont itemFromString:@"Help"
- target:self
- selector:@selector(help:)];
- Menu *menu = [Menu menuWithItems:start, help, nil];
- [menu alignItemsVertically];
- [self add:menu];
- }
- return self;
- }
- -(void)startGame: (id)sender {
- NSLog(@”start game”);
- }
- -(void)help: (id)sender {
- NSLog(@”help”);
- }
- @end
現在先放下這startGame和 help這兩個方法,一會兒我們再回來更新它們.
現在我們有了可執行檔menu,我們需要開啟SimpleGameAppDelegate(.h和.m)檔案,讓Director在應用程式啟動時載入MenuScene
在SimpleGameAppDelegate.h的頂部加入 cocos2d 和 MenuScene的import:
- #import <UIKit/UIKit.h>
- #import “cocos2d.h”
- #import “MenuScene.h”接下來,開啟SimpleGameAppDelegate.m,添加如下代碼:
- #import “SimpleGameAppDelegate.h”
- @implementation SimpleGameAppDelegate
- - (void)applicationDidFinishLaunching:(UIApplication *)application {
- UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
- [window setUserInteractionEnabled:YES];
- [window setMultipleTouchEnabled:YES];
- [[Director sharedDirector] setLandscape: YES];
- [[Director sharedDirector] attachInWindow:window];[window makeKeyAndVisible];
- MenuScene * ms = [MenuScene node];
- [[Director sharedDirector] runWithScene:ms];
- }
- @end
現在你可以Build and Go這個項目了,你將看到下面這個醜陋畫面.
幸運的是,我們已經學到了很多Cocos2D的用法,這將讓後面的事情變得簡單許多.
加入一個遊戲情境.
接下來,我們要建立一個簡單的遊戲情境,它將在點擊Start Game選項後顯示.讓我們加入另一個不同的背景圖片,當我們進入遊戲時就會現實它了.
加入這個圖片到項目中,它將成為遊戲情境的背景.
接著建立GameScene.h 和 GameScene.m檔案至Classes組中.在GameScene.h檔案中添加如下代碼:
- #import <UIKit/UIKit.h>
- #import “cocos2d.h”@interface GameScene : Scene {}
- @end
- @interface GameLayer : Layer {}
- @end
-
- 修改 GameScene.m使其看起來如下:
-
- #import “GameScene.h”
- #import “MenuScene.h”@implementation GameScene
- - (id) init {
- self = [super init];
- if (self != nil) {
- Sprite * bg = [Sprite spriteWithFile:@"game.png"];
- [bg setPosition:cpv(240, 160)];
- [self add:bg z:0];
- [self add:[GameLayer node] z:1];
- }
- return self;
- }
- @end
- @implementation GameLayer
- - (id) init {
- self = [super init];
- if (self != nil) {
- isTouchEnabled = YES;
- }
- return self;
- }
- - (BOOL)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
- MenuScene * ms = [MenuScene node];
- [[Director sharedDirector] replaceScene:ms];
- return kEventHandled;
- }
- @end
最後,我們要回去MenuLayer類中更新startGame方法,修改如下:
- -(void)startGame: (id)sender {
- GameScene * gs = [GameScene node];
- [[Director sharedDirector] replaceScene:gs];
- }
大膽的建立這個項目,沉浸在成功的喜悅幾秒鐘吧.Cocos2d iPhone最好的地方就是從這裡開始一切都變得簡單了,困難的地方已經結束了.
教學到這裡就結束了.
你可以下載我們為這個教程製作的專案檔.
我們希望這能起到協助介紹 Cocos2d iPhone 這個項目的作用,可以讓你花一點時間來瞭解一下這個偉大的項目.
小結:Cocos2d iPhone教程 全過程的內容介紹完了,希望本文對你有所協助!更多遊戲開發的內容請參考編輯精選!
原帖地址 http://www.cocoachina.com/bbs/read.php?tid-2697-fpage-11.html